线程安全问题
多线程并发操作同一数据时, 就有可能出现线程安全问题
使用同步技术可以解决这种问题, 把操作数据的代码进行同步, 不要多个线程一起操作
多次启动一个线程是非法的,特别是当线程已经结束执行后,不能再重新启动
* Vector是线程安全的,ArrayList是线程不安全的
* StringBuffer是线程安全的,StringBuilder是线程不安全的
* Hashtable是线程安全的,HashMap是线程不安全的
public class demon3_ticket { /* * 铁路售票, 100张 4个窗口卖完 */ public static void main(String[] args) { new Ticket().start(); new Ticket().start(); new Ticket().start(); new Ticket().start(); } } class Ticket extends Thread{ private static int ticket = 100; public void run() { while(true){ synchronized (Ticket.class) { if (ticket <= 0) { break; } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(this.getName() + "这是第" + ticket -- + "张票"); } } } }
public class demon4_ticket_runnable { public static void main(String[] args) { MyTicket mt1 = new MyTicket(); new Thread(mt1).start(); new Thread(mt1).start(); new Thread(mt1).start(); new Thread(mt1).start(); } } class MyTicket implements Runnable{ private int tickets = 100; public void run() { while(true){ synchronized (Ticket.class) { if (tickets <= 0) { break; } try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "这是第" + tickets -- + "张票"); } } } }
竹杖芒鞋轻胜马,一蓑烟雨任平生。
回首向来萧瑟处,也无风雨也无晴。