1.2.3实例变量与线程安全(共享数据的情况)

来源:互联网 发布:定性与定量数据区别 编辑:程序博客网 时间:2024/05/19 11:47

package demo;/** * Created by sunyifeng on 17/10/9. */public class MyThread extends Thread {    private int count = 5;    @Override    public void run(){        super.run();        count --;        System.out.println("由" + this.currentThread().getName() + "计算,count=" + count);    }}
package demo;/** * Created by sunyifeng on 17/10/9. */public class Run {    public static void main(String[] args) {        MyThread myThread = new MyThread();        Thread a = new Thread(myThread, "A");        Thread b = new Thread(myThread, "B");        Thread c = new Thread(myThread, "C");        Thread d = new Thread(myThread, "D");        Thread e = new Thread(myThread, "E");        //        a.start();        b.start();        c.start();        d.start();        e.start();    }}
运行结果:

由A计算,count=4
由C计算,count=2
由B计算,count=3
由D计算,count=1
由E计算,count=0

程序说明:

如果有多线程访问,则必定会出现多线程的安全问题。

package demo;/** * Created by sunyifeng on 17/10/9. */public class MyThread extends Thread {    private int count = 5;    @Override    synchronized public void run(){        super.run();        count --;        System.out.println("由" + this.currentThread().getName() + "计算,count=" + count);    }}
通过在run方法前加入synchrinized多个线程在执行run方法时,以排队的方式处理。当一个线程调用此方法前,先判断run方法有没有被上锁,如有锁,必须等到其他线程对run方法执行完之后才能执行。


阅读全文
0 0
原创粉丝点击