多线程的应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程的应用相关的知识,希望对你有一定的参考价值。
需求描述
1. 三个线程,名称分别为“张三”、“李四”、“票贩子”,共同抢100张火车票。
2. 每个线程抢到一张票后,都必须休眠500毫秒,用来模拟网络延时。
3. 限“票贩子”只能抢一张票。
1 public class TicketOffice implements Runnable { 2 private int count = 100; // 记录剩余票数 3 private int no = 0; // 记录买到第几张票 4 private boolean flag = false; //记录是否售完 5 public boolean x=false; 6 public void run() { 7 while (true) { 8 sale(); 9 if(count<=0){ 10 break; 11 } 12 } 13 } 14 // 卖票 15 public boolean sale() { 16 if (flag==true) { 17 return false; 18 } 19 // 第一步:设置买到第几张票和剩余票数 20 no++; 21 count--; 22 try { 23 Thread.sleep(500); 24 // 模拟网络延时 25 } catch (InterruptedException e) { 26 e.printStackTrace(); 27 } 28 // 第二步:显示信息 29 System.out.println(Thread.currentThread().getName() + "抢到第" + no + "张票," + "剩余" + count + "张票!"); 30 if(count<=0){ 31 flag=true; 32 return false; 33 } 34 if(Thread.currentThread().getName().equals("票贩子")){ 35 Thread.currentThread().stop(); 36 } 37 return true; 38 } 39 } 40 41 public class Test { 42 public static void main(String[] args) { 43 TicketOffice ticket =new TicketOffice(); 44 new Thread(ticket,"张三").start(); 45 new Thread(ticket,"李四").start(); 46 new Thread(ticket,"票贩子").start(); 47 } 48 }
1 public class TicketOffice implements Runnable { 2 private int count = 100; // 记录剩余票数 3 private int no = 0; // 记录买到第几张票 4 private boolean flag = false; //记录是否售完 5 public void run() { 6 while (true) { 7 sale(); 8 if(count<=0){ 9 break; 10 } 11 } 12 } 13 // 卖票 14 public synchronized boolean sale() {//同步 15 if (flag==true) { 16 notify(); 17 return false; 18 } 19 // 第一步:设置买到第几张票和剩余票数 20 no++; 21 count--; 22 try { 23 Thread.sleep(500); 24 // 模拟网络延时 25 } catch (InterruptedException e) { 26 e.printStackTrace(); 27 } 28 // 第二步:显示信息 29 System.out.println(Thread.currentThread().getName() + "抢到第" + no + "张票," + "剩余" + count + "张票!"); 30 if(count<=0){ 31 flag=true; 32 return false; 33 } 34 if(Thread.currentThread().getName().equals("票贩子")){ 35 try { 36 this.wait(); 37 } catch (InterruptedException e) { 38 e.printStackTrace(); 39 } 40 } 41 return true; 42 } 43 } 44 45 public class Test { 46 public static void main(String[] args) { 47 TicketOffice ticket =new TicketOffice(); 48 new Thread(ticket,"张三").start(); 49 new Thread(ticket,"李四").start(); 50 new Thread(ticket,"票贩子").start(); 51 } 52 }
以上是关于多线程的应用的主要内容,如果未能解决你的问题,请参考以下文章