这节课里拓哥先是用一个例子来解释为何需要用到join
而设计了第三个线程(ThreadThree)来锁定第二个线程,
在two执行的过程里,one等待two的过程中,three将two对象锁定
用了synchronized(two)关键字,来证明:
一旦对象被synchronized锁定,
在它不被释放的情况下,其他的对象都需要等待。
但同时,这里有可能会产生一个死锁的效果,
从而引入了【哲学家就餐】的例子来说明死锁有可能存在。
解决死锁的情况:
1、产生时间差,让他们不在同一时间访问筷子
2、不让对象被公用
在课程的最后20分钟里,拓哥演示了Timer计时器(定时器)的线程相关小应用。
它属于java.util包下的Timer类,用之前需要导包,快捷键:Alt+Enter
1、通过无参数构造方法来创建对象
2、用:↓↓↓↓↓↓↓↓↓↓↓
timer.schedule(new TimeTask(){
public void run() {
System.out.println(“第”+count++ +”次发送”);
for(int i = 0;i
}
System.out.println(“呵呵,真好玩儿!”);
}
} , Date类型的firstTime , long类型的period毫秒);
↑↑↑↑↑↑↑↑↑↑ 方法作为一个线程来做定时器的实际执行。