java中的线程初步
来源:互联网 发布:人在德国上淘宝 编辑:程序博客网 时间:2024/06/10 08:01
- 线程实现的两种方式
- 继承Thread类
- 实现Runnable接口
- 推荐方式
- 线程的操作方法
- 线程同步的三种方法
- 同步代码块
- 同步方法
- Lock
- 死锁
- 中断线程
- 生产者和消费者应用案例
线程实现的两种方式
java中想要实现多线程操作,有两种方式
继承Thread类
继承Thread类后需要覆写其中的run()方法,表示该进程开始时运行run()方法中的内容。
在类实例化之后调用其start()方法就创建了一个线程。
注意:不是调用run()方法。而且调用start()方法后表示的是线程已经准备就绪,等待CPU执行。
如何获得当前线程的名字呢? Thread.currentThread().getName();
返回的就是当前线程的名称。
实现Runnable接口
一个类实现Runnable接口后实现其中的run()方法。
然后在创建一个Thread对象,同时将Runnable对象作为参数传递给构造方法,这样创建出来的Thread对象再调用run()方法就可以实现线程的创建,同样的,注意同上,创建后仅仅是准备完毕,需要CPU来决定运行。
推荐方式
使用第二种方式,实现接口后可以把run()方法和线程类分开,而且还可以继承其他的类。
线程的操作方法
详细叙述一下sleep方法和yield()方法的区别。
在休眠的过程中,线程还在并且不会被其他线程“抢夺”,只是不工作了,在休眠结束后,再进行CPU的“抢夺”。
而yield()方法是表示该线程让出控制权,在这段时间内不进行工作,让给其它线程工作。
线程同步的三种方法
同步代码块
在代码块前由synchronized(mutex)修饰
synchronized(mutex){//同步内容}
其中mutex就是锁的概念,用任意对象都可以。
同时同步的代码应该尽量短,因为同步之后同步内容结束之前其他线程都无法执行。用性能来实现代码安全。
同步方法
在方法前用synchronized修饰,比如:
public synchronized void function { //方法内容}
Lock
在JDK1.5后提供了这一功能,举例:
//互斥锁private final ReentrantLock lock = new ReetrantLock();public void function{ lock.lock();//上锁。 //方法内容 lock.unlock();//解锁。}
死锁
多线程中要进行资源的共享就需要同步代码,而同步的过多,就可能引起死锁,如何避免死锁,是很重要的一个问题。
下面先给出一个死锁的反例:
//现在有两个类 Customer(顾客)Waiter(服务员)class Customer{ public synchronized void say(Waiter w){ System.out.println("顾客说:先吃饭再买单。"); w.doService(); } public synhronized void doService(){ System.out.println("同意,先吃饭吧。"); }}class Waiter{ public synchronized void say(Customer c){ System.out.println("服务员说:先买单再吃饭。"); w.doService(); } public synhronized void doService(){ System.out.println("同意,先买单吧。"); }}//场景代码class DeadThread implements Runnable{ Customer c = new Customer(); Waiter w = new Waiter(); public DeadThread(){ new Thread(this).start(); w.say(c); } @Override public void run(){ c.say(w); }}
在自己的同步带吗中调用其它对象的同步代码,就会可能发生死锁。
中断线程
如果在一个线程执行过程中怎么样可以中断它呢?
可以在线程中设置一个标识,在线程运行时判断标识是否正确,可以在其他线程中改变这个标识,这样就可以中断线程的运行了。
生产者和消费者应用案例
- java中的线程初步
- java线程初步学习
- JAVA初步认识线程
- Java线程初步
- Java线程初步1
- JAVA 线程初步
- Java线程初步
- java中线程初步了解
- JAVA线程的初步学习
- JAVA线程初步了解1
- Java线程安全初步了解
- 初步认识一下java中的反射
- 初步探索java中的UUID
- 初步了解java中的注解
- Java 中的接口使用初步
- java学习笔记-线程的初步研究
- java并发编程--线程池初步
- java并发编程--线程池初步
- 转载的文章
- 算法---寻找最小的k个数
- Java的重载和重写区别(面试常见)
- IOCTL函数用法
- 玩命牛的成长记录(二十三)——各种文字特效
- java中的线程初步
- Apple硬件设备占有率统计网站
- Android之Monkey全参数(包含隐藏参数)
- [华为机试练习题]17.可怕的阶乘
- UISearchController
- 《猜猜看》之参考“单选按钮事件处理”
- MySQL数据库主从同步
- android 即时通讯 心跳
- Android图片合成/裁剪原理(转)