synchronized修飾方法で使用するオブジェクトロック

1571 ワード

synchronizedをstaticメソッドに追加する前にclassにロック、すなわちクラスロックを追加します.synchronizedを非静的メソッドの前に追加するのは、オブジェクトに鍵をかけることです.
public class Task2 {

    public synchronized static void doLongTimeTaskA() {
        System.out.println("name = " + Thread.currentThread().getName() + ", begain");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("name = " + Thread.currentThread().getName() + ", end");
    }

    public synchronized static void doLongTimeTaskB() {
        System.out.println("name = " + Thread.currentThread().getName() + ", begain");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("name = " + Thread.currentThread().getName() + ", end");
    }

    public synchronized void doLongTimeTaskC() {

        System.out.println("name = " + Thread.currentThread().getName() + ", begain");
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("name = " + Thread.currentThread().getName() + ", end");

    }

1.ThreadAはdoLongTimeTaskA()を実行し、ThreadBはdoLongTimeTaskB()を実行します.この場合、ThreadBはThreadAの実行が完了するまで待つ必要があります.したがって,クラスロック(synchronized修飾の静的手法)は同期的である.
2 ThreadCはdoLongTimeTaskC()を実行する必要があります.この場合、メソッドのロックはインスタンス化されたオブジェクトです.