通过售票的例子
通过分析:发现,打印出0,-1,-2等错票。
多线程的运行出现了安全问题。
问题的原因:
当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分
还没执行完。另一个线程参与进来执行。导致共享数据的错误。
解决办法:
对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。
其他线程不可以参与执行
java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块。
synchronized(对象)
{
需要被同步的代码
}
/* 通过分析:发现,打印出0,-1,-2等错票。 多线程的运行出现了安全问题。 问题的原因: 当多条语句在操作同一个线程共享数据时。一个线程对多条语句只执行了一部分 还没执行完。另一个线程参与进来执行。导致共享数据的错误。 解决办法: 对多条操作共享数据的语句。只能让一个线程都执行完。在执行过程中。 其他线程不可以参与执行 java对于多线程的安全问题提供了专业的解决方式。 就是同步代码块。 synchronized(对象) { 需要被同步的代码 } */ class Tickets implements Runnable { private int tick = 100; Object obj = new Object(); public void run() { while(true) { synchronized(obj) { if(tick >0) { try { Thread.sleep(10); } catch (Exception e) { } System.out.println("tick:"+tick--); } } } } } class Test_11_08 { public static void main(String[] args) { System.out.println("Hello Wolrd"); Tickets t = new Tickets(); 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(); } }