2

我是线程世界的新手,我正在通过线程了解最新的 util 包可重入锁机制,我正在了解同步机制和新添加的锁机制之间的基本差异,正如文章中的这些差异..

  1. ReentrantLock 和 synchronized 关键字之间的另一个显着区别是公平性。synchronized 关键字不支持公平。任何线程一旦释放就可以获取锁,不能指定偏好,另一方面可以通过指定公平属性使 ReentrantLock 公平,同时创建 ReentrantLock 的实例。公平属性为最长等待线程提供锁,以防发生争用。如果你能提供一个小程序来证明这一点 sp,我可以掌握更多

  2. synchronized 和 ReentrantLock 之间的主要区别是能够以中断方式尝试锁定,并且具有超时。线程不需要无限阻塞,synchronized就是这种情况,如果你能提供一个小程序来证明这一点sp,我可以掌握更多

  3. ReentrantLock 和 Java 中的 synchronized 关键字之间另一个值得注意的区别是,在等待 Lock 时可以中断 Thread。在 synchronized 关键字的情况下,线程可以无限期地阻塞等待锁定,并且无法控制。ReentrantLock 提供了一个叫做 的方法lockInterruptibly(),可以用来在线程等待锁的时候中断它。同样tryLock(),如果在某个时间段内没有锁可用,可以使用 timeout 来超时。如果你能提供一个小程序来证明这一点 sp ,我可以掌握更多

伙计们,你能不能提供一个小程序来显示以上三点

我已经尝试过这个程序,请告知需要在其中进行哪些更改以证明以上 3 点..

public class ReentrantLockHowto {

    private final ReentrantLock lock = new ReentrantLock();
    private int count = 0;

     //Locking using Lock and ReentrantLock
     public int getCount() {
        lock.lock();
        try {
            System.out.println(Thread.currentThread().getName() + " gets Count: " + count);
            return count++;
        } finally {
            lock.unlock();
        }
     }

     //Implicit locking using synchronized keyword
     public int getCountTwo() {
            return count++;
     }



    public static void main(String args[]) {
        final ThreadTest counter = new ThreadTest();
        Thread t1 = new Thread() {

            @Override
            public void run() {
                while (counter.getCount() < 6) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException ex) {
                        ex.printStackTrace();                    }
                }
            }
        };

        Thread t2 = new Thread() {

            @Override
            public void run() {
                while (counter.getCount() < 6) {
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        };

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

    }
}

输出:

Thread-0 gets Count: 0
Thread-1 gets Count: 1
Thread-1 gets Count: 2
Thread-0 gets Count: 3
Thread-1 gets Count: 4
Thread-0 gets Count: 5
Thread-0 gets Count: 6
Thread-1 gets Count: 7
4

0 回答 0