java多线程学习-4

问:多线程之间通信方法有哪些?

》wait(),notify(),notifyAll()。

问:以上三个方法的使用场景、使用方法与注意事项有哪些?

* 多个线程通信
 * wait(),notify(),notifyAll()
 *
 * wait(),当前线程立即进入阻塞状态,并释放同步监视器
 * notify(),一旦执行此方法,就会释放被wait的线程。如果多个,只唤醒优先级高的那个
 * notifyAll(),一旦执行此方法,就会释放所有被wait的线程
 *
 * 这三个方法只能放在同步代码块或同步方法中
 * 这三个方法必须是同步代码块或者同步方法中的同步监视器

问:请解释一下sleep()和wai()两个方法的异同点?

相同点

都可以使当前线程立即处于阻塞状态 

不同点:

1、调用者不同。wait()是Object类中的方法,二sleep()是Thread中的方法

2、调用时机不同:sleep没有限制,但是wait只能在synchronized同步代码块中调用【由同步监视器调用】。

3、sleep()不会释放锁。wait()会释放锁。导致的结果就是:sleep容易抢占锁,发生死锁现象

 

问:创建线程一共有哪几种方法?
》四种:继承Thread,实现Runnable,实现Callable接口,线程池

问:继承Callable这种方式创建线程相比较与继承Runnable,有什么优点?

》1、call()方法有返回值,而run()方法没有返回值。有返回值便于线程间通信。

 2、call()方法可以抛出一个异常,run()方法没有

 3、Callable接口支持泛型

posted @ 2020-08-31 21:06  Java民工陆小凤  阅读(104)  评论(0编辑  收藏  举报