package cc; // //其实在此例子中是有漏洞的。存在安全隐患。 //因为多线程的随机性,这样的话,可能卖出负数(或者重复)的票,出现了问题。多执行几次便可出现 // //这里有一个问题很值得注意:这里的异常只可以try catch但是不可以抛出!!!为什么呢? //因为Runnable接口在定义时没有异常抛出,所以实现了此接口的类也不可以抛出,只能try catch!!! // //参见线程同步(二)的改进 class Test3 { public static void main(String[] args) { Ticket t = new Ticket();// 这里只建立了一个对象 Thread tr1 = new Thread(t); Thread tr2 = new Thread(t); Thread tr3 = new Thread(t); tr1.start(); tr2.start(); tr3.start(); } } class Ticket implements Runnable { int num = 10; public void run() {// 安全隐患的代码!!这里用的是sleep来模拟了一些异常,比如网络延时! while (true) { if (num > 0) { try { Thread.sleep(1000); } catch (Exception e) { e.toString(); } System.out.println(Thread.currentThread().getName() + "……现在卖出第" + num-- + "号票"); } } } }