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

   日期:2020-09-28     浏览:146    评论:0    
核心提示:查看本章节查看作业目录需求说明:多线程操作同一个实例变量的操作会引发多线程并发的安全问题。现有 3 个线程代表 3 只猴子,对类中的一个整型变量 count(代表花的总数,共 20 朵花)进行操作。该变量代表花的总数,不同猴子(线程)每采摘一次,花的总数少 1,直至所有花被不同的猴子采摘完,程序结束实现思路:项目中创建 Current 类,在 Current 类中,声明静态的 Current 类型引用 current 和 int 类型的实例变量 num,并指定 num 的初始值为 2

查看本章节

查看作业目录

需求说明:

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

实现思路:

  1. 项目中创建 Current 类,在 Current 类中,声明静态的 Current 类型引用 current 和 int 类型的实例变量 num,并指定 num 的初始值为 20,代表花的总数
  2. 定义采花 fetch() 方法。在方法中使用同步代码块对 current 对象进行加锁。在同步代码块中,判断 num 是否大于 0,如果大于 0,则输出猴子采花的进度,并让 num 自减
  3. 重写 run() 方法。在该方法中创建 while 循环,条件为 num 大于 0。循环中调用 fetch(String name) 方法,通过调用 Thread.currentThread().getName() 方法获取当前运行的线程名称,并将该线程名称赋值给参数 name
  4. 创建程序入口 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();
	}
}

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服