美文网首页
多线程共享数据问题

多线程共享数据问题

作者: jose_dl | 来源:发表于2017-08-13 08:42 被阅读0次

经典卖票例子

package com.cskaoyan.a;

public class Test3 {
    
    public static void main(String[] args) {
        
        SellTicket sTicket = new SellTicket();
        Thread t1 = new Thread(sTicket);
        Thread t2 = new Thread(sTicket);
        Thread t3 = new Thread(sTicket);
        
        t1.start();
        t2.start();
        t3.start();
    }

}
class SellTicket implements Runnable{
    int tickets=100;

    @Override
    public void run() {

        while (true&&tickets>0) {
            System.out.println(Thread.currentThread().getName()+"卖出了一张,剩余"+(--tickets));
        }
    }
    
}
  • 上述代码出现安全问题,解决如下
    while(true){
            //线程共享数据,保证安全,加入同步代码块
            synchronized(obj){
            //对票数判断,大于0,可以出售,变量--操作
                if( ticket > 0){
                    try{
                       Thread.sleep(10);
                    }catch(Exception ex){}
                    System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--);
                }
            }
        }
  • synchronized方法
    关于synchronized方法的同步锁,使用this。因为实现implent接口,多线程共享一个对象的资源,this指向每次执行方法的对象的引用,而这里那个对象只有一个
public  synchronized void payTicket(){  
            if( ticket > 0){
                try{
                   Thread.sleep(10);
                }catch(Exception ex){}
                System.out.println(Thread.currentThread().getName()+" 出售第 "+ticket--);
            }
        
    }
  • 静态synchronized方法
    静态synchronized方法中的同步锁对象就不能是this了。因为this是对象的引用,在static中那个方法属于类,因此那个所对象是那个类的字节码文件

相关文章

  • ThreadLocal解析

    原理 产生线程安全问题的根源在于多线程之间的数据共享。如果没有数据共享,就没有多线程并发安全问题。ThreadLo...

  • ThreadLocal解析

    原理 产生线程安全问题的根源在于多线程之间的数据共享。如果没有数据共享,就没有多线程并发安全问题。ThreadLo...

  • JAVA学习笔记之 多线程卖票

    多线程程序出现安全问题的原因:A:是多线程程序。B:有共享数据。C:针对共享数据有多条语句操作。 现在的程序存在着...

  • iOS 多线程技术有些啥,如何解决多线程带来的隐患

    有多线程就有因为多线程造成的数据安全问题(如何确保同一块共享内存在多线程下不发生数据错乱和数据安全问题) 线程同步...

  • UI数据源同步

    数据源同步问题多线程对共享数据的访问,需要考虑数据源的同步问题,如何解决tableView在多线程环境下的修改或者...

  • 2020-09-15 Java线程安全

    一、线程安全简介 单线程程序不会产生线程安全问题。多线程程序没有访问共享数据,也不会产生问题。多线程程序访问共享数...

  • 多线程共享数据问题

    经典卖票例子 上述代码出现安全问题,解决如下 synchronized方法关于synchronized方法的同步锁...

  • 2019-08-16 Synchronized的使用

    为什么要使用Synchronized关键字?为了解决线程高并发安全问题,共享数据,多线程共同操作共享数据,Sync...

  • 锁(synchronized)

    synchronized 在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。...

  • Java并发之synchronized

    一、前言序章   Java因为实现的是共享数据模型,在多线程操作共享数据时,会引起线程安全问题。Java为了解决线...

网友评论

      本文标题:多线程共享数据问题

      本文链接:https://www.haomeiwen.com/subject/ixusrxtx.html