Java ReentrantReadWriteLock.writeLock线程在条件

import java.util.concurrent.locks.*;

class CalendarUser extends Thread {

    public static final String[] WEEKDAYS = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
    private static volatile int today = 0;
    private static ReentrantReadWriteLock marker = new ReentrantReadWriteLock();
    private static Lock readMarker = marker.readLock();
    private static Lock writeMarker = marker.writeLock();

    public CalendarUser(String name) {
        this.setName(name);
    }

    public void run() {
        while ( today < WEEKDAYS.length-1) {
            if (this.getName().contains("Writer")) { // update the shared calendar
                writeMarker.lock();
                System.out.println(this.getName()+" "+today);
                try {
                    today++;
                } catch (Exception e)
                {e.printStackTrace(); }
                {
                    writeMarker.unlock();
                }
            } else {
                readMarker.lock();
                try {
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    readMarker.unlock();
                }
            }
        }
    }
}

public class ReadWriteLockDemo {
    public static void main(String[] args) {
        // create ten reader threads
        for (int i=0; i<10; i++)
            new CalendarUser("Reader-"+i).start();

        // ...but only two writer threads
        for (int i=0; i<2; i++)
            new CalendarUser("Writer-"+i).start();
    }
}

输出:

  

作家-0 0

     

作家-0 1

     

作家-0 2

     

作家-0 3

     

作家-0 4

     

作家-0 5

     

作家1 6

写者0在today = 6时退出循环。我不了解的是Writer-1在today = 6时执行一次。那怎么可能?如果不满足循环条件,它将如何进入循环?我的直觉告诉我,它与JIT编译器有关。

beibei0524 回答:Java ReentrantReadWriteLock.writeLock线程在条件

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3162685.html

大家都在问