我是靠谱客的博主 老实身影,这篇文章主要介绍多线程通信实现(Synchronized),现在分享给大家,希望可以做个参考。

 

复制代码
1
2
3
4
5
6
7
8
9
一、创建资源类,在资源类创建属性和操作方法。 二、在资源类操作方法 (1)判断 (2)运行 (3)通知 三、创建多个线程,调用资源类的操作方法 四、防止虚假唤醒问题等
复制代码
1
2
3
4
5
6
7
8
9
10
11
notifyAll public final void notifyAll() 唤醒正在等待对象监视器的所有线程。 线程通过调用wait方法之一等待对象的监视器。 唤醒的线程将无法继续,直到当前线程释放该对象上的锁。 唤醒的线程将以通常的方式与任何其他线程竞争,这些线程可能正在积极地竞争在该对象上进行同步; 例如,唤醒的线程在下一个锁定该对象的线程中不会有可靠的特权或缺点。 该方法只能由作为该对象的监视器的所有者的线程调用。 有关线程可以成为监视器所有者的方法的说明,请参阅notify方法。 异常 IllegalMonitorStateException - 如果当前线程不是此对象的监视器的所有者。 另请参见: notify() , wait()
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
wait public final void wait() throws InterruptedException 导致当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法。 换句话说,这个方法的行为就好像简单地执行呼叫wait(0) 。 当前的线程必须拥有该对象的显示器。 该线程释放此监视器的所有权,并等待另一个线程通知等待该对象监视器的线程通过调用notify方法或notifyAll方法notifyAll 。 然后线程等待,直到它可以重新获得监视器的所有权并恢复执行。 像在一个参数版本中,中断和虚假唤醒是可能的,并且该方法应该始终在循环中使用: synchronized (obj) { while (<condition does not hold>) obj.wait(); ... // Perform action appropriate to condition } 该方法只能由作为该对象的监视器的所有者的线程调用。 有关线程可以成为监视器所有者的方式的说明,请参阅notify方法。 异常 IllegalMonitorStateException - 如果当前线程不是对象监视器的所有者。 InterruptedException - 如果任何线程在当前线程等待通知之前或当前线程中断当前线程。 当抛出此异常时,当前线程的中断状态将被清除。 另请参见: notify() , notifyAll()

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Share{ private int number = 0; public synchronized void incr() throws InterruptedException { if (number !=0){ this.wait(); } number++; System.out.println(Thread.currentThread().getName()+"::"+number); this.notifyAll(); } public synchronized void decr() throws InterruptedException { if (number !=1){ this.wait(); } number--; System.out.println(Thread.currentThread().getName()+"::"+number); this.notifyAll(); } } public class MainThreadDemo { public static void main(String[] args) { Share share = new Share(); new Thread(()->{ for(int i =1;i<=10;i++){ try { share.incr(); } catch (InterruptedException e) { e.printStackTrace(); } } },"AA").start(); new Thread(()->{ for(int i =1;i<=10;i++){ try { share.decr(); } catch (InterruptedException e) { e.printStackTrace(); } } },"BB").start(); } }

 

最后

以上就是老实身影最近收集整理的关于多线程通信实现(Synchronized)的全部内容,更多相关多线程通信实现(Synchronized)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部