# 锁类Lock 和 Synchronized#

来源:互联网 发布:js 高精度计算 编辑:程序博客网 时间:2024/06/06 07:39

# 锁类Lock #

对比:

**1)synchronized (类,当做锁,多个线程要是同一个类)
{同步代码;}**

    例子:        package Lock;        import java.util.concurrent.locks.Lock;        import java.util.concurrent.locks.ReentrantLock;        public class LockTest {        public static void main(String[] args) {            output out = new output();            开启两个线程,输出一个字符串,一个字符一个字符输出            new Thread(new Runnable() {            public void run() {                out.show("abcdef");            }            }).start();            new Thread(new Runnable() {            public void run() {                out.show("123456");            }            }).start();        }    }        class output {        public void show(String str) {        char[] x = str.toCharArray();        while (true) {            synchronized (output.class) {            //同步代码            for (int i = 0; i < x.length; i++) {                    System.out.print(x[i]);                }                System.out.println();            //            }        }    }}    

2)try {同步代码块} finally {lock.unlock();}

为什么用try:因为如果在代码里报错的话,这个锁的钥匙就永远被带走了,这个段代码也永远锁死了,所以用finally

    package Lock;    import java.util.concurrent.locks.Lock;    import java.util.concurrent.locks.ReentrantLock;    public class LockTest {        public static void main(String[] args) {            output out = new output();            new Thread(new Runnable() {                public void run() {                    out.show("abcdef");                }            }).start();            new Thread(new Runnable() {                public void run() {                    out.show("123456");                }            }).start();        }    }    class output {        Lock lock = new ReentrantLock();        public void show(String str) {            char[] x = str.toCharArray();            while (true) {                //同步代码块                lock.lock();                try {                    for (int i = 0; i < x.length; i++) {                        System.out.print(x[i]);                    }                    System.out.println();                } finally {                    lock.unlock();                }                    //            }        }    } 
0 0
原创粉丝点击