美文网首页
线程---同步解决线程的安全问题

线程---同步解决线程的安全问题

作者: 李霖神谷 | 来源:发表于2017-06-04 10:59 被阅读17次
class Demo implements Runnable {
    //创建同步所需对象
    Object obj = new Object();
    int num = 100;

    public void run(){
        while(true){
            //创建同步解决线程的安全问题,同步加在使用共享数据的代码快上
            synchronized(obj){
            if(num>0){
                try{Thread.sleep(6);}catch(InterruptedException e){
                    
                }
                System.out.println(Thread.currentThread().getName()+"---"+num);
                num--;
            }
        
            }
        }
    }
}

public class XianCheng {
    public static void main(String[] args) {
        Demo d=new Demo();
        Thread th=new Thread(d);
        Thread th1=new Thread(d);
        Thread th2=new Thread(d);
        th.start();
        th1.start();
        th2.start();
    }
}

两个线程,在两个不同的方法上进行

class Demo implements Runnable {
    int num = 100;
    boolean flag = true;

    public void run() {
        if (flag == true) {
            while (true) {
                synchronized (this) {
                    if (num > 0) {
                        System.out.println(Thread.currentThread().getName() + "---" + num);
                        num--;
                    }

                }
            }
        } else {
            show();
        }
    }

    //当方法里的代码都需要加同步,就可以 在方法上加同步,非静态方法加同步,同步锁使用的是当前对象
    //当在静态方法上加同步时,同步锁是类名加class
    private synchronized void show() {
        // TODO Auto-generated method stub
        if (num > 0) {
            System.out.println(Thread.currentThread().getName() + "---" + num);
            num--;
        }
    }
}

public class XianCheng {
    public static void main(String[] args) {
        Demo d = new Demo();
        Thread th1 = new Thread(d);
        Thread th2 = new Thread(d);
        th1.start();
        //由于cpu先是在主线程上运行的,当开启第一个线程时cpu不一定立刻执行
        //这时加一个“睡眠”,保证cpu进入第一个线程
        try{Thread.sleep(6);}catch(InterruptedException e){
            
        }
        th2.start();
    }
}

相关文章

  • 线程的基本语法

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

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

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

  • Java线程安全

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

  • java同步机制的几种方式

    java同步机制的几种方式 出现线程安全问题: 如果存在多个线程对共享资源竞争,就可能发生线程安全问题。 一般解决...

  • 多线程资源共享之同步锁

    本篇为大家讲解解决多线程线程安全问题的另一种思路,同步锁:synchronized和ReentrantLock。...

  • 2020-07-27 同步方法解决线程安全问题

    2.同步方法 1.使用同步方法解决实现Runnable接口方法解决线程同步安全问题 2.使用同步方法解决继承Thr...

  • 线程 - 草稿

    并发 资源的分配与调度 线程安全问题 多线程访问临界资源 解决思想 原子性 可见性 有序性 解决 同步互斥访问...

  • 7.2 Handler消息传递机制

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

  • 同步监视器锁定的释放问题

    在任何编程语言中,事关线程安全问题非常重要,而同步监测器是解决java多线程安全问题的关键,关于监测器锁定...

  • 同步机制解决线程安全问题(2020-03-31)

    如何解决线程之前提到的线程安全问题?Java提供了一种同步机制来解决这种问题: 1.同步代码块 我们先介绍sync...

网友评论

      本文标题:线程---同步解决线程的安全问题

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