java多线程操作同一个变量_编写Java程序,实现多线程操作同一个实例变量的操作会引发多线程并发的安全问题。...

查看本章节

查看作业目录

需求说明:

多线程操作同一个实例变量的操作会引发多线程并发的安全问题。现有 3 个线程代表 3 只猴子,对类中的一个整型变量 count(代表花的总数,共 20 朵花)进行操作。该变量代表花的总数,不同猴子(线程)每采摘一次,花的总数少 1,直至所有花被不同的猴子采摘完,程序结束

1a5829c66493e3f9b7be3ef3212415bf.png

实现思路:

项目中创建 Current 类,在 Current 类中,声明静态的 Current 类型引用 current 和 int 类型的实例变量 num,并指定 num 的初始值为 20,代表花的总数

定义采花 fetch() 方法。在方法中使用同步代码块对 current 对象进行加锁。在同步代码块中,判断 num 是否大于 0,如果大于 0,则输出猴子采花的进度,并让 num 自减

重写 run() 方法。在该方法中创建 while 循环,条件为 num 大于 0。循环中调用 fetch(String name) 方法,通过调用 Thread.currentThread().getName() 方法获取当前运行的线程名称,并将该线程名称赋值给参数 name

创建程序入口 main() 方法,在该方法中创建 3 条线程,并分别为这 3 条线程设置名称为“猴子 A”“猴子 B”和“猴子 C”,依次调用 3 个线程对象的 start() 方法,启动线程

实现代码:

public class T1 implements Runnable {

//public static T1 t2 = new T1();

//设置鲜花的数量为20

int num = 20;

@Override

public void run() {

synchronized (new T1()) {

while (num>0) {

System.out.println("猴子"+Thread.currentThread().getName()+"\t菜花\t"+num--);

try {

Thread.sleep(500);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

public static void main(String[] args) {

T1 t1=new T1();

Thread thread = new Thread(t1);

Thread thread1 = new Thread(t1);

thread1.setName("B");

thread.setName("A");

thread.start();

thread1.start();

}

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值