Java 스레드 동기화 잠금 선택
6498 단어 java 스레드
스레드 동기화가 필요할 때 어떻게 적당한 스레드 자물쇠를 선택합니까?
예: 상수 풀에 저장할 수 있는 객체, String 객체 등을 선택합니다.
public class SyncTest
{
private String name = "name";
public void method(String flag)
{
synchronized (name)
{
System.out.println(flag + ", invoke method ....");
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
SyncTest test1 = new SyncTest();
SyncTest test2 = new SyncTest();
MyThread1 myThread1 = new MyThread1();
MyThread1 myThread2 = new MyThread1();
myThread1.syncTest = test1;
myThread2.syncTest = test1;
MyThread1 myThread3 = new MyThread1();
MyThread1 myThread4 = new MyThread1();
myThread3.syncTest = test2;
myThread4.syncTest = test2;
myThread1.start();
myThread2.start();
myThread3.start();
myThread4.start();
}
}
스레드 클래스:
public class MyThread1 extends Thread
{
SyncTest syncTest;
@Override
public void run()
{
syncTest.method(this.getName());
}
}
원래는 스레드thread1과thread2가 동기화되고, 스레드thread3과thread4가 동기화되어야 하는데, 결과는?
그러나 라인thread1,thread2,thread3,thread4가 동기화되어 답답합니다.
나는 선택한 동기화 잠금 대상을 추천한다.
package com.rcx.thread;
public class SyncTest
{
// instance ,
private byte[] lock = new byte[0];
public void method(String flag)
{
synchronized (lock)
{
System.out.println(flag + ", invoke method f....");
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
SyncTest test1 = new SyncTest();
SyncTest test2 = new SyncTest();
MyThread1 myThread1 = new MyThread1();
MyThread1 myThread2 = new MyThread1();
myThread1.syncTest = test1;
myThread2.syncTest = test1;
MyThread1 myThread3 = new MyThread1();
MyThread1 myThread4 = new MyThread1();
myThread3.syncTest = test2;
myThread4.syncTest = test2;
myThread1.start();
myThread2.start();
myThread3.start();
myThread4.start();
}
}
0 길이의 byte 그룹을 동기화 자물쇠 대상으로 사용하는 것을 추천합니다. 의아한 오류가 발생하지 않을 뿐만 아니라 큰 메모리를 차지하지 않습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 스레드 동기화 잠금 선택스레드 동기화가 필요할 때 어떻게 적당한 스레드 자물쇠를 선택합니까? 예: 상수 풀에 저장할 수 있는 객체, String 객체 등을 선택합니다. 스레드 클래스: 원래는 스레드thread1과thread2가 동기화되고,...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.