多线程的例子
要求:四个窗口卖一百张票。
分析:每个窗口卖的票不能重复,不能有0号票或者负号票,并且四个窗口不能卖同号票。所以可以用同步的方
法(关键字:synchronized)。
1、方法:synchronized在函数代码块:
public class ThreadDemo1 {
public static void main(String[] args) {
TestThread a = new TestThread();
Thread tt = new Thread(a);
//tt.setDeamon(true);
tt.start();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
}
}
class TestThread implements Runnable{
private int tickets = 100;
String str = new String("");
public void run(){
while(true){
synchronized(str){
if(tickets > 0){
try{
Thread.sleep(20);
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖票"+tickets--);
}
}
//sale();
}
}
2、方法:在方法中写synchronized:
public class ThreadDemo1 {
public static void main(String[] args) {
TestThread a = new TestThread();
Thread tt = new Thread(a);
//tt.setDeamon(true);
tt.start();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
}
}
class TestThread implements Runnable{
private int tickets = 100;
String str = new String("");
public void run(){
while(true){
if(tickets > 0){
try{
Thread.sleep(20);
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖票"+tickets--);
}
}
sale();
}
public synchronized void sale(){
if(tickets > 0){
try{
Thread.sleep(20);
}
catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖票"+tickets--);
}
}
}