juc学习----1.juc简介

    技术2025-08-07  9

    juc

    在java5.0提供了java.util.concurrent(简称juc)包,在此包中增加了在并发编程中很常用的实用工具类,用语定义类似于线程的自定义子系统,包括线程池、异步IO和轻量级任务框架,提供可调的、灵活的线程池,还提供了设计用于多线程上下文中的Collection实现等.

    1.volatile关键字 内存可见性

    问题引出:

    public class VolatileTest { public static void main(String[] args) { myThread td = new myThread(); new Thread(td).start(); while(true) { if(td.isFlag()) { System.out.println("******************"); break; } } } } class myThread implements Runnable{ private boolean flag = false; @Override public void run() { try { Thread.sleep(200); } catch (Exception e) { } flag = true; System.out.println("flag="+isFlag()); } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } }

    同步锁:

    while(true) { synchronized (td) { //同步锁 if(td.isFlag()) { System.out.println("******************"); break; } } }

    volatile关键字:当多个线程操作共享数据时,可以保证内存中的数据是可见的,相对于synchronized是一种较为轻量级的同步策略。因此也可以使用volatile来解决共享数据的问题:

    //不使用数据副本,直接在主存中操作 private volatile boolean flag = false;

    注意: 1.volatile不具备"互斥性" 2.volatile不能保证变量的"原子性"

    Processed: 0.015, SQL: 9