由於共享代碼,我面臨着與多線程相關的一個問題。我想避免同步。我看到了許多與AtomicInteger相關的線程信號量。但是,對於何種方式以及如何更好地選擇比同步更好的選擇還沒有清楚的認識。如何避免在多線程環境中同步?
這是我想讓線程安全的簡單代碼。 創建線程的類。
public class ThreadCheck implements Runnable {
TestStaticVar var = new TestStaticVar();
@Override
public void run() {
// TODO Auto-generated method stub
try {
var.holdOn();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[]) {
ThreadCheck t = new ThreadCheck();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
t1.setName("A");
t1.start();
t2.setName("B");
t2.start();
}}
要由多個線程執行的類。
public class TestStaticVar {
Semaphore sem = new Semaphore(1);
public void holdOn() throws InterruptedException{
sem.acquire();
System.out.println("Inside Hold on....."+Thread.currentThread().getName()+"==> ");//+i.get());
try {
for (long i=0; i<Integer.MAX_VALUE; i++) {
}
System.out.println(var1.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Finished Hold on===="+Thread.currentThread().getName());
sem.release(1);
System.out.println("Execution Completed by =====> "+Thread.currentThread().getName());
}}
任何幫助是非常appriciate。
感謝, 拉傑什
使用'Semaphore'無法幫助您避免同步,因爲它只是另一個同步原語。嘗試描述你的任務。 – axtavt
使用內置的併發數據結構,或者只保留關鍵部分小。比寫一些不明顯線程安全的瘋狂代碼更好。 – ide
這只是與實際代碼等效的示例代碼。我不能使用同步,我不能使對象不可變。有沒有其他方法可以實現與同步功能相同的功能? – RajeshS