java多线程JUC库分析

  1. 锁能够解决并发共抢资源的问题,例子如下
public class Test {private static int sum; public static void main(String[] args) {for (int i = 0; i< 100; i++){ Thread t = new Thread(new Calc()); t.start(); } try{ Thread.sleep(1000); } catch (Exception e){ e.printStackTrace(); } System.out.println(sum); }static class Calc implements Runnable {@Override public void run() {sum++; System.out.println(Thread.currentThread().getName() +":"+ sum); } } }

【java多线程JUC库分析】启动100个线程对sum进行累加,结果不一定是100,优化,加锁后问题解决
public class Test {private static volatile int sum; private static ReentrantLock lock; public static void main(String[] args) { lock = new ReentrantLock(); for (int i = 0; i< 100; i++){ Thread t = new Thread(new Calc()); t.start(); } try{ Thread.sleep(1000); } catch (Exception e){ e.printStackTrace(); } System.out.println(sum); }static class Calc implements Runnable {@Override public void run() { lock.lock(); sum++; lock.unlock(); System.out.println(Thread.currentThread().getName() +":"+ sum); } } }

题外话:上述例子还有一个细节就是,volatile ,没有volatile ,不影响最终结果,但是线程打印的值有重复。这里验证类volatile的可见性,一个线程修改,其他线程立即可见。
java多线程JUC库分析
文章图片

  1. 锁的Condition,condition是条件,用于共同完成一项作业,需要协作的场景。

    推荐阅读