Является ли java.lang.Thread сам по себе потокобезопасным классом?

Мне было интересно, требуется ли внешняя синхронизация для использования методов из java.lang.Thread ?

Например, можем ли мы вызвать метод t1.isAlive () из любого потока без внешней синхронизации и ожидать, что он вернется:

true, если t1 уже был запущен, иначе false.

Или требуется внешняя синхронизация для вызова методов в java.lang.Thread ?

public static void main(String args[]) {
        final java.lang.Thread t1 = new java.lang.Thread(new java.lang.Runnable() {

            @Override
            public void run() {
                while(true){
                    //task
                }
            }
        });
        java.lang.Thread t2 = new java.lang.Thread(new java.lang.Runnable() {

            @Override
            public void run() {
                while (true) {
                    System.out.println(t1.isAlive()); // do we need synchronization before calling isAlive() ?
                }
            }
        });
        t2.start();
        t1.start();
        try {
            java.lang.Thread.sleep(1000000);
        } catch (java.lang.InterruptedException e) {
            e.printStackTrace();
        }
    }

7
задан Donald Duck 20 February 2018 в 16:37
поделиться