线程及其通信

来源:互联网 发布:录音剪辑软件 编辑:程序博客网 时间:2024/05/17 02:11

线程

进程(正在执行的程序,宏观)包括(一个或多个)线程(微观)

线程的意义并不是制造了多个CPU,而是利用了CPU的空闲时间

 

1. 继承thread(不需要导包),重写run方法/实现runnable

 

2.主函数调用线程类的start方法,而非run方法

thread(实现runnable接口的类作为参数).start(),或,继承thread重写run方法的类的实例名.Start()

 

3.repaint 方法,paint 方法,使用线程可以实现定时重绘

 

4.join

在b的run方法中写a.join那么不管a是否在b之前start,或是休眠多久,a都会先于b执行(整个run方法,有多少次就多少次,执行完才轮到b)

 

5. notify 和wait都一定要在synchronized(同步锁)里面,

关于同步锁:同步锁中的代码并不是只有一个对象可以执行,而是它锁住的对象只有一个对象可以进行修改

 

6.继承了Thread就拥有了属性name及其set、get方法



7. 生产者-消费者问题

 

用同步锁两个生产者一个消费者(都休眠100ms)为什么不报错而是停了?

三个都处于等待,生产者1生产完时消费者正在休眠,wait列表中只有另一个生产者,无法notify到消费者,生产者2收到notify却因为生产者1已足够生产苹果而不进行动作,这样,当消费者休眠完虽然有苹果却因为没人notify一直处于wait状态,两个生产者也因为消费者没有消费没人notify,这就造成了不报错却僵持的局面。

 

改消费者休眠时间为10ms后不停止了,是因为供需平衡了吗?

修改后生产者notify到生产者的概率将大大减小(不是不存在),所以从宏观上看,这个问题被解决了

总结:都在等待是安全的,都在休眠却是危险的

 

如果一个对象发出了notify指令,wait队列为空会怎样?

 

0 0