网络抢票synchronized同步票数(多线程,线程安全 )
编写
package com.Input_Output.I_O2; /** * 车站抢票 同步代码synchronized * @author zzh * */ public class Ticket { public static void main(String[] args) { //抢票的对象 User u=new User(); //同一个线程 Thread t1=new Thread(u,"小红"); Thread t2=new Thread(u,"小强"); Thread t3=new Thread(u,"黄牛"); t1.start(); t2.start(); t3.start(); } } /** * 抢票的用户的线程 */ class User implements Runnable{ private int num; //抢到的第几张票 private int count=20; //余票 /** * 抢票 */ public void run() { while(true) { try { Thread.sleep(300); //模拟网络延迟 } catch (InterruptedException e) { e.printStackTrace(); } synchronized (this) { //同步代码块 一次只能有一个线程使用代码块 if(count<=0) { break; } num++; count--; System.out.println(Thread.currentThread().getName()+"抢到了第"+num+"张票,还剩"+count+"张票"); if(Thread.currentThread().getName().equals("黄牛")) { return; } } } } }
运行