public class Main { /** * 需求:100张票 通过4个窗口卖完 * * * 多线程并发操作同一数据时, 就有可能出现线程安全问题 * 使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作 */ public static void main(String[] args) { TicketSeller t1 = new TicketSeller(); TicketSeller t2 = new TicketSeller(); TicketSeller t3 = new TicketSeller(); TicketSeller t4 = new TicketSeller(); t1.setName("窗口1"); t2.setName("窗口2"); t3.setName("窗口3"); t4.setName("窗口4"); t1.start(); t2.start(); t3.start(); t4.start(); } } class TicketSeller extends Thread{ private static int ticket = 100;//如果实现Runnable接口,就不用定义成static //private static Object o = new Object();//如果用成员变量当作锁对象,必须是静态的 public TicketSeller() { } public TicketSeller(String name) { super(name); // TODO Auto-generated constructor stub } @Override public void run() { while(true) { synchronized (TicketSeller.class) {//唯一! if(ticket <= 0) { break; } try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(getName() + ":剩余票数:" + ticket--); } } } }
java 多线程 线程安全问题
猜你喜欢
转载自blog.csdn.net/pastthewind/article/details/80212615
今日推荐
周排行