zoukankan      html  css  js  c++  java
  • 重学JAVA基础(七):线程的wait、notify、notifyAll、sleep

    /**
     * 测试thread的wait  notify  notifyAll  sleep  Interrupted
     * @author tomsnail
     * @date 2015年4月20日 下午3:20:44
     */
    public class Test1 {
        
        /**
         * 对象锁
         * @author tomsnail
         * @date 2015年4月20日 下午3:14:13
         */
        private static final Object lockObject = new Object();
        
        /**
         * 等待线程
         * @author tomsnail
         * @date 2015年4月20日 下午3:14:22
         */
        static class Thread1 implements Runnable{
    
            @Override
            public void run() {
                synchronized (lockObject) {
                    try {
                        System.out.println(Thread.currentThread().getName()+"wait start");
                        lockObject.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(Thread.currentThread().getName()+"wait end");
                }
            }
            
        }
        
        /**
         * 唤醒线程
         * @author tomsnail
         * @date 2015年4月20日 下午3:14:36
         */
        static class Thread2 implements Runnable{
    
            @Override
            public void run() {
                synchronized (lockObject) {
                    lockObject.notify();
                    System.out.println(Thread.currentThread().getName()+"notify");
                }
            }
        }
        
        /**
         * 唤醒所有线程
         * @author tomsnail
         * @date 2015年4月20日 下午3:14:51
         */
        static class Thread3 implements Runnable{
    
            @Override
            public void run() {
                synchronized (lockObject) {
                    lockObject.notifyAll();
                    System.out.println(Thread.currentThread().getName()+"notifyAll");
                }
            }
        }
        
        /**
         * 睡眠线程
         * @author tomsnail
         * @date 2015年4月20日 下午3:20:30
         */
        static class Thread4 implements Runnable{
    
            @Override
            public void run() {
                try {
                    System.out.println(Thread.currentThread().getName()+"sleep");
                    Thread.currentThread().sleep(20000);
                } catch (InterruptedException e) {
                    System.out.println(Thread.currentThread().getName()+"Interrupted");
                }
                
            }
            
        }
    
        public static void main(String[] args) {
            Thread t1 = new Thread(new Thread1());
            Thread t3 = new Thread(new Thread1());
            Thread t4 = new Thread(new Thread1());
            Thread t2 = new Thread(new Thread2());
            Thread t5 = new Thread(new Thread3());
            //3个等待线程运行
            t1.start();
            t3.start();
            t4.start();
            try {
                Thread.currentThread().sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //唤醒线程运行
            t2.start();
            try {
                Thread.currentThread().sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //唤醒所有线程运行
            t5.start();
            //睡眠线程
            Thread t6 = new Thread(new Thread4());
            t6.start();    
            try {
                Thread.currentThread().sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //睡眠线程中断
            t6.interrupt();
        }
    
    }

    结果

    Thread-0wait start
    Thread-2wait start
    Thread-1wait start
    Thread-3notify
    Thread-0wait end
    Thread-4notifyAll
    Thread-1wait end
    Thread-2wait end
    Thread-5sleep
    Thread-5Interrupted
  • 相关阅读:
    ab Apache HTTP server benchmarking tool
    压缩JS的类
    看电影学人生:《白银帝国》有感
    JavaScript 闭包
    微软为asp.net ajax和jquery创建了CDN
    JavaScript工具
    Mysql初始化root密码和允许远程访问
    一步一步学Ruby(二十一):文件操作2
    测试包含HttpContext.Current的代码
    What’s the difference between <system.web> and <system.webServer>?
  • 原文地址:https://www.cnblogs.com/TomSnail/p/4441694.html
Copyright © 2011-2022 走看看