Umumé, ana conto c ing kuliah 17
volatile
, ujar manawa variabel isCancel
ora digunakake volatile
, banjur kanthi ngganti nilai variabel iki saka benang liyane, wong liya ora bakal ngerti babagan iki, aku nulis ulang conto kasebut, mung. ing metode kasebut run
jeneng benang lan nilai ditampilake isCancel
lan ternyata preduli gumantung saka variabel saiki volatile
utawa ora, nilai kasebut isih ganti kanggo kabeh aliran, sanajan sampeyan nuthuk, aku bingung; yen aku ngerti sinkronisasi, banjur aku volatile
bingung lan ora bisa aplikasi ing sembarang cara. Mungkin aku salah nggawe conto? Aku uga nyoba nggawe kelas Clock
lan warisan saka Thread
, lan main
nggawe loro kedadean lan mbukak loro, iku uga volatile
ora bisa, bantuan kula, yen ora, aku bakal edan)
public static void main(String[] args)
{
Clock n = new Clock();
Thread thread1 = new Thread(n);
Thread thread2 = new Thread(n);
thread1.start();
thread2.start();
try
{
Thread.sleep(3000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
n.cancel();
}
public static class Clock implements Runnable
{
private volatile boolean isCancel = false;
public void cancel()
{
this.isCancel = true;
}
@Override
public void run()
{
while (true)
{
try
{ System.out.println(Thread.currentThread().getName()+" "+isCancel);
Thread.sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}
GO TO FULL VERSION