线程安全
来源:互联网 发布:apache base64 encode 编辑:程序博客网 时间:2024/05/16 05:37
线程安全概念
当多个线程访问某个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。
synchronized :可以在任意对象及方法上加锁,而加锁的的这段代码称为互斥区或临界区
import java.util.concurrent.atomic.AtomicInteger;public class MyThread extends Thread{ private int count = 5 ; //synchronized加锁 public void run(){ count--; System.out.println(this.currentThread().getName() + " count = "+ count); } public static void main(String[] args) { MyThread myThread = new MyThread(); Thread t1 = new Thread(myThread,"t1"); Thread t2 = new Thread(myThread,"t2"); Thread t3 = new Thread(myThread,"t3"); Thread t4 = new Thread(myThread,"t4"); Thread t5 = new Thread(myThread,"t5"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); }}
打印结果如下所示
显然这不是想要的结果,线程不安全,正确应为4-3-2-1-0
run方法加锁
总结:
当多个线程访问myThread的run方法时,以排队的方式进行处理(这里排对是按照CPU分配的先后顺序而定的,不是按照代码的顺序,t1,t2,t3,……)
一个线程想要执行synchronized修饰的方法里的代码:
1、 尝试获得锁
2 、如果拿到锁,执行synchronized代码体内容;拿不到锁,这个线程就会不断的尝试获得这把锁,直到拿到为止,
而且是多个线程同时去竞争这把锁。(也就是会有锁竞争的问题)
类似5个小朋友上厕所,t1先进去了,执行锁。t2,t3,t4,t5这5个小孩等待着,什么时候t1从厕所出来,锁释放,完后t2,t3,t4,t5这5个小朋友第一时间争夺这把锁,只能有一人进去。
0 0
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- 线程安全
- deal,电机
- 前端面试题整理-------HTML/CSS部分----小知识点
- 算法训练 s01串
- WebSocket简单介绍
- jQuery点击隐藏和显示
- 线程安全
- 字符数组3
- okhttp的使用
- 提高篇项目3.1-求四个数的最大公约数
- 蓝桥杯 大臣的旅费
- POJ 3344 Chessboard Dance 可能会
- 关于keil软件编译后的data xdata 和code的说明
- Whoere即时聊天App(一)项目综述
- 学生信息管理系统