java 线程休眠与唤醒_java 线程的休眠和唤醒

Treead中使用wair() 和notify()

/*需求:

使用双线程交替打印1,2,3,4.......

eg:

T11 ------->1

T22 ------->2

T11 ------->3

T22 ------->4

T11 ------->5

T22 ------->6

T11 ------->7

T22 ------->8

....................

*可以看出来这里的双线程是同步的*

*/

ps:我也是一个新手,有问题欢迎交流,780720038@qq.com

我直接贴代码了 ,ceshi2.java

335b83df261c422459d4afc29ba290e5.png

d1b641f023dd079c9e4a800b96607d9d.gif

1

2 public classceshi2 {3

4 public static voidmain(String[] args) {5 //TODO Auto-generated method stub

6 Number number =newNumber();7 Thread t11 =new Thread(new T11(number)); //生成线程

8 Thread t22 =new Thread(newT22(number));9 t11.setName("t11"); //设置线程名

10 t22.setName("t22");11 t11.start(); //启动线程

12 t22.start();13

14 }15

16 }17

18 classNumber{19 public int num=1; //number.num的起始值为1

20 }21

22 class T11 implementsRunnable{23 privateNumber number;24 T11(Number number){ //通过构造函数引入 Number对象

25 this.number=number;26 }27 public voidrun(){28 while(number.num<30){ //条件 number.num <30

29 synchronized(number){//通过同步语句块将异步线程变成同步线程执行以下语句,对象为number

30 try{31 if(number.num %2!=0){ //打印非2的倍数

32 Thread.sleep(500);//0.5s打印一次

33 System.out.println(Thread.currentThread().getName()+"------>"+number.num); //获取当前线程名

34 number.num++; //打印后num 自增

35 }36 if(number.num %2==0){37 number.notify(); //唤醒 休眠状态下的线程T22

38 number.wait(); //线程T11释放对象锁,让线程T22获取到对象锁,而线程T11进入休眠状态

39 }40 }catch(Exception e){41 e.printStackTrace(); //详细的异常情况

42 }43 }44 }45 }46 }47

48 class T22 implementsRunnable{49 privateNumber number;50 T22(Number number){51 this.number=number;52 }53 public voidrun(){54 while(number.num<30){55 synchronized(number){56 try{57 if(number.num %2==0){ //打印2的倍数

58 Thread.sleep(500);59 System.out.println(Thread.currentThread().getName()+"------>"+number.num);60 number.num++;61 }62 if(number.num %2!=0){63 number.notify();64 number.wait();65

66 }67 }catch(Exception e){68 e.printStackTrace();69 }70 }71 }72 }73 }

ceshi2.java

执行结果如下:

335b83df261c422459d4afc29ba290e5.png执行结果

相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

hill ca

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值