本文来自公众号“一个程序员的成长”的技术分享,原题为《什么是线程安全,你真的了解吗?》。
1.jpeg (51.33 KB, 下载次数: 911)
下载附件 保存到相册
6 年前 上传
2.jpg (17.27 KB, 下载次数: 911)
3.jpg (21.32 KB, 下载次数: 951)
4.jpg (27.98 KB, 下载次数: 921)
0.jpeg (23.94 KB, 下载次数: 939)
Integer count = 0; public void getCount() { count ++; System.out.println(count); }
5.jpg (9.44 KB, 下载次数: 987)
public void threadMethod(int j) { int i = 1; j = j + i; }
public class ThreadDemo { int count = 0; // 记录方法的命中次数 public void threadMethod(int j) { count++ ; int i = 1; j = j + i; } }
6.jpg (18.94 KB, 下载次数: 931)
public class ThreadDemo { int count = 0; // 记录方法的命中次数 public synchronized void threadMethod(int j) { count++ ; int i = 1; j = j + i; } }
private Lock lock = new ReentrantLock(); // ReentrantLock是Lock的子类 private void method(Thread thread){ lock.lock(); // 获取锁对象 try { System.out.println("线程名:"+thread.getName() + "获得了锁"); // Thread.sleep(2000); }catch(Exception e){ e.printStackTrace(); } finally { System.out.println("线程名:"+thread.getName() + "释放了锁"); lock.unlock(); // 释放锁对象 } }
public static void main(String[] args) { LockTest lockTest = new LockTest(); // 线程1 Thread t1 = new Thread(new Runnable() { @Override public void run() { // Thread.currentThread() 返回当前线程的引用 lockTest.method(Thread.currentThread()); } }, "t1"); // 线程2 Thread t2 = new Thread(new Runnable() { @Override public void run() { lockTest.method(Thread.currentThread()); } }, "t2"); t1.start(); t2.start(); }
7.png (9.09 KB, 下载次数: 929)
private void method(Thread thread){ // lock.lock(); // 获取锁对象 if (lock.tryLock()) { try { System.out.println("线程名:"+thread.getName() + "获得了锁"); // Thread.sleep(2000); }catch(Exception e){ e.printStackTrace(); } finally { System.out.println("线程名:"+thread.getName() + "释放了锁"); lock.unlock(); // 释放锁对象 } } }
8.png (7.96 KB, 下载次数: 989)
private void method(Thread thread) throws InterruptedException { // lock.lock(); // 获取锁对象 // 如果2秒内获取不到锁对象,那就不再等待 if (lock.tryLock(2,TimeUnit.SECONDS)) { try { System.out.println("线程名:"+thread.getName() + "获得了锁"); // 这里睡眠3秒 Thread.sleep(3000); }catch(Exception e){ e.printStackTrace(); } finally { System.out.println("线程名:"+thread.getName() + "释放了锁"); lock.unlock(); // 释放锁对象 } } }
9.png (7.96 KB, 下载次数: 957)
10.png (9.08 KB, 下载次数: 948)
10.png (9.08 KB, 下载次数: 908)
来源:即时通讯网 - 即时通讯开发者社区!
查看评分
黑绳子
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
引用:云水 发表于 2019-04-13 08:42 ⊂_ヽ \\ Λ_Λ \( 'ㅅ' )
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.158209 second(s), 44 queries , Gzip On.