线程安全
单线程是不会出现线程安全问题的
多线程程序没有访问共享数据,不会产生问题
多线程访问共享的数据就会产生线程安全问题
//实现买票案例
//卖票出现了线程安全问题:卖出了不存在的票和重复的票
//使用线程安全的一种方案:使用同步代码块
首先创建RunnableImp类
package demo06线程安全; //实现买票案例 //卖票出现了线程安全问题:卖出了不存在的票和重复的票 //使用线程安全的一种方案:使用同步代码块 public class RunnableImp implements Runnable { //定义一个多线程共享的票源 private int ticket=100; //创建一个锁对象 Object obj=new Object(); //定义线程任务:买票 @Override public void run() { //使用死循环让卖票重复执行 while(true){ //同步代码块 synchronized(obj){ //先判断票是否存在 if(ticket>0){ //为了提高安全问题出现的次数。让程序睡眠一下 try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"---正在卖票"+ticket+"张票"); ticket--; } } } } }
在创建Ticket类:
package demo06线程安全; //模拟买票案例,对共享的票进行出售 public class Ticket { public static void main(String[] args) { //创建接口的实现类对象 RunnableImp run =new RunnableImp(); //创建Thread类对象,构造方法中传递Runnable接口对象 Thread t0=new Thread(run); Thread t1=new Thread(run); Thread t2=new Thread(run); //开启线程 t0.start(); t1.start(); t2.start(); } }
结果:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)