码迷,mamicode.com
首页 > 编程语言 > 详细

并发包java.util.concurrent.locks.Lock

时间:2017-05-25 11:52:11      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:线程模型   print   rgs   i++   ide   zha   同步   生活   thread   

**
 * 
 * @描述: Lock比传统线程模型中的synchronized方式更加面向对象、与生活中的锁类似,锁本身也应该是一个对象,两个线程执行的代码片段要实现同步互排的效果
 *        它们必须用同一个LOCK,锁是上线代表要操作的资源内部类的内部方法上,而不是线程的方法中 .
 * @作者: Wnj .
 * @创建时间: 2017年5月16日 .
 * @版本: 1.0 .
 */
public class LockTest {
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        new LockTest().init();
    }
    
    private void init() {
        final Outputer outputer = new Outputer();
        
        //A
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(10);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //如果A线程还没打印完成,B线程就被调度执行,那么打印就不完整
                    outputer.output("zhangxiaoxiang");
                }
                
            }
        }).start();
        
        //B
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(10);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    outputer.output("lihuoming");
                }
                
            }
        }).start();
        
    }
    
    /**
     * 
     * @描述: 锁是上线代表要操作的资源内部类的内部方法上
     * @作者: Wnj .
     * @创建时间: 2017年5月16日 .
     * @版本: 1.0 .
     */
    static class Outputer {
        
        Lock lock = new ReentrantLock();
        
        /**
         * 使用lock
         * <功能详细描述>
         * @param name
         */
        public void output(String name) {
            int len = name.length();
            lock.lock();
            try {
                for (int i = 0; i < len; i++) {
                    System.out.print(name.charAt(i));
                }
                System.out.println();
            }
            finally {
                lock.unlock();
            }
        }
        /**
         * 使用synchronized
         * <功能详细描述>
         * @param name
         */
        public synchronized void output2(String name) {
            int len = name.length();
            for (int i = 0; i < len; i++) {
                System.out.print(name.charAt(i));
            }
            System.out.println();
        }
        /**
         * 使用synchronized
         * <功能详细描述>
         * @param name
         */
        public static synchronized void output3(String name) {
            int len = name.length();
            for (int i = 0; i < len; i++) {
                System.out.print(name.charAt(i));
            }
            System.out.println();
        }
    }
}

 

并发包java.util.concurrent.locks.Lock

标签:线程模型   print   rgs   i++   ide   zha   同步   生活   thread   

原文地址:http://www.cnblogs.com/superGG/p/6902350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!