2020-11-28

java中线程的两种基本实现方法

方法1:
package superior;
public class TicketWindow2 implements Runnable{
private int ticket = 30;
Object o = new Object();
private String name;
public TicketWindow2(int tiket) { super();
this.ticket = tiket;
}
public TicketWindow2(String name) { super();
this.name = name;
}
@Override
public String toString() {
return “TicketWindow [tiket=” + ticket + “, name=” + name + “]”;
}
public void run() {
while(true) {
//同步线程,一个线程运行中,另一个线程只能等待
synchronized(o) {
if(ticket>0) { System.out.println(Thread.currentThread().getName() + “正在卖第” + ticket + “张票”); //Thread进程睡1000ms,并抛出异常,wait也抛出异常
try {
Thread.sleep(1000);
o.wait();
//输出三个窗口抢一次票,每个窗口都wait一次,所以只会显示三个窗口抢一次票
}
catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace();
} ticket–;
}
}
}
}
}
package superior;
public class TestTicket2 {
public static void main(String[] args) {
// TODO Auto-generated method stub TicketWindow2 t = new TicketWindow2(""); Thread t1= new Thread(t);
Thread t2= new Thread(t);
Thread t3= new Thread(t);
t1.setName(“1号窗口”);
t2.setName(“2号窗口”);
t3.setName(“3号窗口”);
t1.start();
t2.start();
t3.start();
}
}

方法2:
package superior;
//第一步:继承Thread
//第二部:重写run()方法
//第三步:创建子类对象
//第四步:调用start方法开启线程
public class TicketWindow1 extends Thread{ private int ticket = 30;
private String name;
public TicketWindow1(int tiket) {
super();
this.ticket = tiket;
}
public TicketWindow1(String name) { super();
this.name = name;
}
@Override
public String toString() {
return “TicketWindow [tiket=” + ticket + “, name=” + name + “]”;
}
public void run() {
while(ticket>0) { System.out.println(name + “正在卖第” + ticket + “张票”);
ticket–;
}
}
}
package superior;
public class TestTicket1 {
public static void main(String args[]) { TicketWindow1 t1 = new TicketWindow1(“1号窗口”);
TicketWindow1 t2 = new TicketWindow1(“2号窗口”);
TicketWindow1 t3 = new TicketWindow1(“3号窗口”);
t1.start();
t2.start();
t3.start();

}

猜你喜欢

转载自blog.csdn.net/qq_51592187/article/details/110258899