使用多个线程共同售卖20张票
package com.sczy.entity;
public class sales2 implements Runnable {
private int p = 20;//确定售卖的张数
public void run(){
String name = Thread.currentThread().getName();
while (true){
synchronized (this){
if (p>0){
p--;
System.out.println("当前线程"+name+"正在售票 还剩"+p);
}
}
try {//注意此处的线程休眠 不能写在synchronized代码块中,不然只能有一个线程才能得到执行权
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
sales2 sa = new sales2();//创建实现了Runable接口的实体
//创建三个线程,他们都要访问sa中的资源
Thread a = new Thread(sa,"one");
Thread b = new Thread(sa,"two");
Thread c = new Thread(sa,"three");
a.start();
b.start();
c.start();
}
}
创建多个线程实现每个线程都售卖20张票(此处就不需要线程联合)
package com.sczy.entity;
/**
* 实现多线程同时售票 售的票是相对独立的
*/
public class ThreadSales01 extends Thread {
private static int tickets = 20;
public void run(){
String name = Thread.currentThread().getName();//获取线程名字
while (true){
if (tickets>0){
System.out.println("当前线程的名字是"+name);
System.out.println("现在还有的 票数是"+tickets--);
}
}
}
}
package com.sczy.entity;
public class ThreadSales02 extends Thread {
private static int ticket = 20;
public void run(){
String name = Thread.currentThread().getName();
while (true){
if (ticket>0){
System.out.println("当前在售票的线程是"+name);
System.out.println("现在还剩下的票是"+ticket--);
}
}
}
}
package cpm.sczy.test;
import com.sczy.entity.ThreadOne;
import com.sczy.entity.ThreadSales01;
import com.sczy.entity.ThreadSales02;
public class TestForSales01AndSales02 {
public static void main(String[] args) {
//分别创建两个线程,启动线程开始售票
ThreadSales01 sa01 = new ThreadSales01();
sa01.setName("one");
sa01.start();
ThreadSales02 sa02 = new ThreadSales02();
sa02.setName("two");
sa02.start();
}
}