zoukankan      html  css  js  c++  java
  • java多线程之Lock/Condition简介

    在java多线程中,可以使用synchronized关键字实现线程之间的同步互斥,在jdk1.5中增加的ReentrantLock也能实现同样的效果,并且功能更加强大。

    比如具有嗅探锁定,多路分支通知等功能,在使用上比synchronized更加灵活。

    1.Object类中的wait()方法相当于Condition类中的await()方法

    2.Object类中的wait(long timeout)相当于Condition类中的await(long time,TimeUnit unit)方法

    3.Object类中的notify()方法相当于Condition类中的signal()方法

    4.Object类中的notifyAll()方法相当于Condition类中的signalAll()方法

    public class MyService {
        private Lock lock = new ReentrantLock();
        private Condition condition = lock.newCondition();
    
        public void await() {
            try {
                lock.lock();
                System.out.println("await:" + System.currentTimeMillis());
                condition.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    
        public void signal(){
            try{
                lock.lock();
                System.out.println("signal:"+System.currentTimeMillis());
                condition.signal();
            }finally {
                lock.unlock();
            }
        }
    }
    
    public class ThreadA extends Thread{
        private MyService myService;
    
        public ThreadA(MyService myService) {
            this.myService = myService;
        }
    
        @Override
        public void run() {
            myService.await();
        }
    }
    
    
    public class Run {
        public static void main(String[] args) throws InterruptedException {
            MyService myService=new MyService();
            ThreadA a = new ThreadA(myService);
            a.start();
            Thread.sleep(1000);
            myService.signal();
        }
    }

    输出:

    await :1531289025398
    signal:1531289026398
  • 相关阅读:
    元数据Metadata
    博客园如何使用MarkDown
    zookeeper集群搭建
    Java 疑问自问自答
    R中rep函数的使用
    R中unlist函数的使用
    Windows7 系统 CMD命令行,点阵字体不能改变大小以及中文乱码的问题
    C# ConfigurationManager不存在问题解决
    Servlet中的请求转发RequestDispatcher接口的forword与Include的区别
    Servlet中的乱码问题及解决办法
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/9294205.html
Copyright © 2011-2022 走看看