美文网首页
线程安全问题

线程安全问题

作者: QinRenMin | 来源:发表于2018-03-09 22:19 被阅读0次
  • 线程产生安全性问题的Reason:
    1 多个线程操作共享的数据。
    2 操作共享数据的代码是多条的。
    当一个线程正在执行共享数据的多条代导致问题代码的过程中,其他线程也参与了运算,就会导致问题的产生。
  • 解决问题的思路:
    就是将操作共享数据的线程封装起来,当有线程执行这代码的时候,其他线程是不可以参与运算的。必须要当前线程把这些代码都执行完毕后,其他线程才可以参与运算。
  • 解决问题的方法
    使用同步代码块
synchronoized(对象)
{
    需要被同步的代码块;
}

同步的好处:解决了线程安全问题;
同步的弊端:相对降低了效率,因为同步外的线程都会判断同步锁;
同步的前提:必须有多个线程使用同一个同步锁。

class TDemo implements Runnable {
    
    int i = 10;
    public void run()
    {
        while(true){
            if(i > 0)
            {
                try
                {
                    Thread.sleep(10);
                }
                catch(InterruptedException e)
                {
                }
                System.out.println(Thread.currentThread().getName()+"--"+i--);
            
            }
        }
    }
}
public class TongBu {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TDemo d = new TDemo();
        Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
        Thread t3 = new Thread(d);
        t1.start();
        t2.start();
        t3.start();
    }

}

image.png

以上代码会出现线程安全问题

解决如下:

class TDemo implements Runnable {
    
    int i = 10;
    public void run()
    {
        while(true){
            synchronized (this){
                if(i > 0)
                {
                    try
                    {
                        Thread.sleep(10);
                    }
                    catch(InterruptedException e)
                    {
                    }
                    System.out.println(Thread.currentThread().getName()+"--"+i--);
                
                }
            }
            }
            
    }
}
public class TongBu {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TDemo d = new TDemo();
        Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
        Thread t3 = new Thread(d);
        t1.start();
        t2.start();
        t3.start();
    }

}
image.png

相关文章

  • Java线程安全

    线程安全问题的概述 线程安全问题的代码实现 线程安全问题产生的原理 解决线程安全问题_同步代码块 同步代码块:sy...

  • 7.2 Handler消息传递机制

    简介:handler消息处理者,用来发生和处理消息,用于解决线程安全问题; 线程安全问题:多线程导致线程安全问题,...

  • 线程的基本语法

    线程同步[解决线程安全问题] 解决线程安全问题 线程同步方式一:同步代码 语法基本 synchronized (同...

  • 五 异常与多线程——第三节 线程同步机制

    1、线程安全问题的概述 多线程访问了共享的数据,就会产生线程安全问题 2、线程安全问题的代码实现 输出:会出现重复...

  • 线程安全问题

    线程安全问题 本篇主要讲解 线程安全问题,演示什么情况下会出现线程安全问题,以及介绍了 Java内存模型 、vol...

  • 线程安全问题的几种解决办法

    title: 线程安全问题date: 2019/04/01 17:13 线程安全问题是由于多个线程同时操作同一全局...

  • volatile关键字

    线程安全问题 Java多线程带来的一个问题是数据安全问题,判断一段Java代码是否有线程安全问题可从以下几点入手:...

  • 2018-06-12 第三十七天

    一、线程安全 线程安全的问题,是针对多线程的程序。单线程的情况下,是不存在线程安全问题。 产生线程安全问题的原因:...

  • java多线程(壹)——线程与锁

    线程与线程安全问题 所有的线程安全问题都可以概况为三个点:原子性,可见性、有序性——————by Java多线程编...

  • java 线程安全问题的解决办法 和死锁

    线程安全问题的解决办法 线程 安全问题的解决方案:sun提供了线程同步机制让我们解决这类问题的。 java线程同步...

网友评论

      本文标题:线程安全问题

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