-
什么是线程安全
堆内存中的数据由于可以被任何线程所访问,在没有限制的情况下存在被意外修改的风险。即堆内存空间在没有保护机制的情况下,对多线程来说是不安全的,因为放进去的数据可能被别的线程破坏。
如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时执行这段代码,如果多线程运行的结果和单线程运行的结果是一样的,而且其他变量的值和预期也是一样的,就是线程安全的。
编程新说:什么是线程安全 -
怎样实现线程安全
一般来说常见的用于保证线程安全的方式有两种- synchronized
synchronized关键字以及和 ReenTrantLock 的对比 - lock(ReenTrantLock )
ReenTrantLock 为Lock的子类private Lock lock = new ReentrantLock(); 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(); // 释放锁对象 } }
- synchronized
-
synchronized与ReenTrantLock的区别
synchronized关键字以及和 ReenTrantLock 的对比 -
volatile关键字的使用
网友评论