java多線程學習之ReentrantReadWriteLock(二)

package learn.thread;

import java.util.concurrent.locks.ReentrantReadWriteLock;

/*
ReentrantReadWriteLock,比ReentrantLock更強大的鎖,讀寫,寫讀互斥
 */
public class Demo17 {

    static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    static int count = 0;

    public static void main(String[] args) {
        Thread t1 = new Thread() {

            @Override
            public void run() {
                lock.readLock().lock();
                try {
                    System.out.println("線程1準備讀取");
                    Thread.sleep(3000);
                    System.out.println("線程1讀取完成");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.readLock().unlock();

            }

        };

        Thread t2 = new Thread() {

            @Override
            public void run() {
                lock.writeLock().lock();
                try {
                    System.out.println("線程2準備寫入");
                    Thread.sleep(3000);
                    System.out.println("線程2寫入完成");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.writeLock().unlock();
            }

        };

        t1.start();
        t2.start();

    }

}
// 線程1準備讀取
// 線程1讀取完成
// 線程2準備寫入
// 線程2寫入完成
package learn.thread;

import java.util.concurrent.locks.ReentrantReadWriteLock;

/*
ReentrantReadWriteLock,比ReentrantLock更強大的鎖,寫寫互斥
 */
public class Demo18 {

    static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
    static int count = 0;

    public static void main(String[] args) {
        Thread t1 = new Thread() {

            @Override
            public void run() {
                lock.writeLock().lock();
                try {
                    System.out.println("線程1準備寫入");
                    Thread.sleep(3000);
                    System.out.println("線程1寫入完成");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.writeLock().unlock();

            }

        };

        Thread t2 = new Thread() {

            @Override
            public void run() {
                lock.writeLock().lock();
                try {
                    System.out.println("線程2準備寫入");
                    Thread.sleep(3000);
                    System.out.println("線程2寫入完成");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                lock.writeLock().unlock();
            }

        };

        t1.start();
        t2.start();

    }

}
// 線程1準備寫入
// 線程1寫入完成
// 線程2準備寫入
// 線程2寫入完成
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章