概述
什么是线程安全?
简单的概括就是,多个线程访问同一个类(对象或者方法),这个类始终可以表现出正确的行为,那么这个类(对象或者方法),就是线程安全的。
package com.jc.thread;
public class Thread01 extends Thread{
private int count = 5;
public void
run(){
count --;
System.out.println(Thread.currentThread().getName()+"---"+count);
}
/**
* 启动5个线程,访问同一个资源
* @param args
*/
public static void main(String[] args) {
Thread01 thread01 = new Thread01();
Thread t1 = new Thread(thread01, "t1");
Thread t2 = new Thread(thread01, "t2");
Thread t3 = new Thread(thread01, "t3");
Thread t4 = new Thread(thread01, "t4");
Thread t5 = new Thread(thread01, "t5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
打印结果如下:
t1---3
t3---2
t2---3
t4---1
t5---0
表明,多个线程访问同一资源时,所表现的结果跟我们预期不一致,说明不是线程安全的。
引入syncronized,syncronized所修饰的代码,我们称之为“临界区”或者“互斥区”
当多个线程访问run方法的时候,首先需要拿到资源锁,这个线程会不断的竞争锁资源,直到拿到这把锁为止。(也会有锁资源竞争的问题)
public synchronized void run(){
count --;
System.out.println(Thread.currentThread().getName()+"---"+count);
}
打印结果如下:
t1---4
t5---3
t4---2
t3---1
t2---0
最后
以上就是昏睡红牛为你收集整理的互联网并发编程之一 线程安全01的全部内容,希望文章能够帮你解决互联网并发编程之一 线程安全01所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复