您的位置:首页 > 编程语言 > Java开发

(九)Java入门--多线程(7)多线程的总结与扩展

2018-02-19 12:54 316 查看

一、多线程总结

1、多线程的创建:继承Thread方法或者实现Runnable接口。

2、多线程的状态:创建、运行、冻结。临时阻塞、消亡等。

3、多线程安全问题的产生:多线程操作共享数据的代码有多条。

4、多线程安全问题的解决:同步函数或者同步代码块。

5、多线程的死锁产生原因:同步锁的嵌套。

6、线程间的通信:等待唤醒机制、多生产多消费者、Lock与Condition。

二、多线程扩展了解

1、多线程中wait和sleep区别

(1)、wait可以指定时间,也可以不指定;但是,sleep必须指定时间。

(2)、在同步中,wait之后释放执行权,释放锁;sleep释放执行权,不释放锁。

(3)、如果在同步中,三个线程都被wait了,如果又同时被notifyAll,会不会造成问题?

不会,因为同一时间只会有一个线程获得执行权,然后获得同步中的锁,去向下执行程序,其他线程只有在当前线程释放锁之后,才有可能执行。

2、线程停止方式

(1)、stop:可以停止线程,但是很不安全。

(2)、run方法结束:一般run当中一般有循环结构,只要控制住循环就可以结束任务。定义标记,让循环在一定条件下结束就ok。

(3)、强制唤醒:可以使用interrupt()方法将线程从冻结状态中恢复到运行状态中,但是会发生InterrupttedException。

(4)、守护线程:setDaemon(),也成做后台线程,只要其他所有线程结束,后台就会自动消失。

3、多线程的其他方法

(1)、join();临时加入一个线程运算时可以使用。(加入到当前线程的话,当前线程会进入冻结状态,等加入的线程执行完之后,才结束冻结状态。)

(2)、线程优先级(1-10):默认是5,10最高。

(3)、yield():暂停当前线程。

(4)、一个线程匿名内部类的小例子:

public class Test {
public static void main(String[] args) {
new Thread(  //接口的匿名对象传给线程当做任务
new Runnable() {
public void run() {
System.out.println("任务");
}
}
)
{//Thread的子类方法实现
public void run()
{
System.out.println("子类");
}
}.start();
// Thread(){....}      子类
//new Thread(){....}   子类对象
}
}

输出结果:
子类


说明:

1、输出为子类的run方法为Thread父类其子类的实现方法,所以会一定执行。

2、输出为任务的run方法为Thread父类其对象任务的调用,所以如果没有子类方才会执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  多线程