Java 线程安全和不安全

概念

线程安全就是要让程序运行出我们想要的结果

假设A和B同时去不同ATM上取同一张卡的1000块钱,如果是线程不安全,那么A和B可以同时取到1000块钱(两人赚大发啦),而如果线程安全呢,就只有一个人能取出来1000块钱。

代码演示, 不安全

package com.javabase;

public class User {
   public int age=1;
   
   public void add(){
	   for(int i=0;i<10;i++){
		   this.age++;
	   }
   }
   
}

package com.javabase;

public class ThreadTest4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		User u=new User();
		Runnable run=new Runnable(){
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println(Thread.currentThread().getName()+"--当前值:"+u.age);
				u.add();
			}
			
		};
		
		
		
		for(int i=0;i<10;i++){
			Thread a=new Thread(run);
			a.start();
//			System.out.println("join之前:"+Thread.currentThread().getName());
//			try {
//				a.join();//相当于,插队
//			} catch (InterruptedException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
		}
		//
		System.out.println("最后结果:"+u.age);
	}

}

运行结果:

Thread-0–当前值:1
最后结果:1 //正确的最后结果应该是101
Thread-1–当前值:1
Thread-2–当前值:21
Thread-4–当前值:21
Thread-5–当前值:41
Thread-6–当前值:51
Thread-7–当前值:61
Thread-8–当前值:71
Thread-3–当前值:81
Thread-9–当前值:81

线程安全 演示代码

package com.javabase;

public class ThreadTest4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		User u=new User();
		Runnable run=new Runnable(){
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println(Thread.currentThread().getName()+"--当前值:"+u.age);
				u.add();
			}
			
		};
		
		
		
		for(int i=0;i<10;i++){
			Thread a=new Thread(run);
			a.start();
			System.out.println("join之前:"+Thread.currentThread().getName());
			try {
				a.join();//相当于,插队
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//
		System.out.println("最后结果:"+u.age);
	}

}

运行结果:
join之前:main
Thread-0–当前值:1
join之前:main
Thread-1–当前值:11
join之前:main
Thread-2–当前值:21
join之前:main
Thread-3–当前值:31
join之前:main
Thread-4–当前值:41
join之前:main
Thread-5–当前值:51
join之前:main
Thread-6–当前值:61
join之前:main
Thread-7–当前值:71
join之前:main
Thread-8–当前值:81
join之前:main
Thread-9–当前值:91
最后结果:101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值