/*多线程的安全问题
1.为什么会出现安全问题?因为程序在运行时,会出现一个线程在判断条件满足后,具备了执行资格,但没有运行代码后一个线程也判断了条件,也具备了执行资格,后一个线程运行了代码,但这时候,线程运行的条件不满足了这时候,就出现了安全问题2.实现接口线程的方法不能抛出异常!*//*运行情况通过分析,发现,打印出0,-1,-2等错票。多线程的运行出现了安全问题问题的原因? 当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完 另一个线程参与进来,导致共享数据错误 解决办法 对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其它线程不参与执行。 Java对于多线程的安全问题提供了专业的解决方式就是同步代码块格式: synchronized(对象) 对象可以随意(使用上帝就行) { 需要被同步的代码(哪些代码在操作共享数据) }*/class Ticket implements Runnable //extends Thread{ object obj=new object(); private static int tick=100; public void run() { while(true) { synchronized(obj) { if(tick>0) { try { Thread.sleep(10); /*每次运行就沉睡一下*/ } catch(Exception e) { } System.out.println(Thread.currentThread().getName()+"sale:--"+tick--); } } } }}class TicketDemo{ public static void main(String args[]) { Ticket t=new Ticket(); Thread t1=new Thread(t); Thread t2=new Thread(t); Thread t3=new Thread(t); Thread t4=new Thread(t); t1.start(); t2.start(); t3.start(); t4.start(); }}