public class SimpleThread extends Thread{
private static int ticNum = 100; //static
public void run(){
while(true){
if(ticNum>0){
System.out.println(Thread.currentThread().getName()+"---:"+ticNum--);
}else{
break;
}
}
}
public static void main(String[] args){
SimpleThread thread0 = new SimpleThread();
SimpleThread thread1 = new SimpleThread();
SimpleThread thread2 = new SimpleThread();
SimpleThread thread3 = new SimpleThread();
thread0.start();
thread1.start();
thread2.start();
thread3.start();
}
}
public class SimpleThread implements Runnable{ //安全问题
private int ticNum = 100; //
public void run(){
while(true){
if(ticNum>0){
System.out.println(Thread.currentThread().getName()+"---:"+ticNum--);
}else{
break;
}
}
}
public static void main(String[] args){
SimpleThread t = new SimpleThread();
Thread thread0 = new Thread(t);
Thread thread1 = new Thread(t);
Thread thread2 = new Thread(t);
Thread thread3 = new Thread(t);
thread0.start();
thread1.start();
thread2.start();
thread3.start();
}
}
安全问题演示:
public class SimpleThread implements Runnable{
private int ticNum = 100;
public void run(){
while(true){
if(ticNum>0){
try{
Thread.currentThread().sleep(50);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"---:"+ticNum--);
}else{
break;
}
}
}
public static void main(String[] args){
SimpleThread t = new SimpleThread();
Thread thread0 = new Thread(t);
Thread thread1 = new Thread(t);
Thread thread2 = new Thread(t);
Thread thread3 = new Thread(t);
thread0.start();
thread1.start();
thread2.start();
thread3.start();
}
}
synchronized:
public class SimpleThread implements Runnable{
private int ticNum = 100;
public void run(){
while(true){
synchronized(this){ //
if(ticNum>0){
System.out.println(Thread.currentThread().getName()+"---:"+ticNum--);
}else{
break;
}
}
}
}
public static void main(String[] args){
SimpleThread t = new SimpleThread();
Thread thread0 = new Thread(t);
Thread thread1 = new Thread(t);
Thread thread2 = new Thread(t);
Thread thread3 = new Thread(t);
thread0.start();
thread1.start();
thread2.start();
thread3.start();
}
}