Secara umum ada contoh c pada kuliah 17
volatile
, dikatakan jika suatu variabel isCancel
tidak digunakan volatile
, maka dengan mengubah nilai variabel tersebut dari thread lain, selebihnya tidak akan mengetahuinya, saya tulis ulang contohnya saja dalam metode ini run
nama utas dan nilainya ditampilkan isCancel
dan ternyata terlepas dari apakah variabel itu ada volatile
atau tidak, nilainya tetap berubah untuk semua aliran, bahkan jika Anda mengetuknya, saya benar-benar bingung; jika saya menemukan sinkronisasinya, lalu saya volatile
bingung dan tidak bisa menerapkannya dengan cara apa pun. Mungkin saya salah membuat contoh? Saya juga mencoba membuat kelas Clock
dan mewarisi dari Thread
, dan main
membuat dua instance dan menjalankan keduanya, itu juga volatile
tidak berhasil, bantu saya, kalau tidak saya akan gila)
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