博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 学习笔记之 实例变量与线程安全
阅读量:7040 次
发布时间:2019-06-28

本文共 2631 字,大约阅读时间需要 8 分钟。

实例变量与线程安全:

 

不共享数据:

public class NoSharedThread extends Thread {    private int count = 5;    public NoSharedThread(String name){        super();        this.setName(name);    }    @Override    public void run() {        super.run();        while (count > 0){            count--;            System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);        }    }}public class ThreadRunMain {    public static void main(String[] args) {        testSharedSafeThead();    }    public static void testNoSharedThread() {        NoSharedThread a = new NoSharedThread("a");        NoSharedThread b = new NoSharedThread("b");        NoSharedThread c = new NoSharedThread("c");        a.start();        b.start();        c.start();    }}

运行结果:

可见线程之间没有互相干扰,都在操作自己的count变量。

 

共享数据:

public class SharedThread extends Thread{    private int count = 5;    public SharedThread(String name) {        super();        this.setName(name);    }    @Override    public void run() {        super.run();        count--;        System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);    }}public class ThreadRunMain {    public static void main(String[] args) {        testSharedThead();    }public static void testSharedThead(){        SharedThread st = new SharedThread("SharedThread");        Thread a = new Thread(st,"a");        Thread b = new Thread(st,"b");        Thread c = new Thread(st,"c");        Thread d = new Thread(st,"d");        Thread e = new Thread(st,"e");        a.start();        b.start();        c.start();        d.start();        e.start();}}

 

运行结果:

可见线程之间互相干扰,产生count值一样的情况,非线程安全的问题出现。

 

共享数据线程安全:

 

public class SharedSafeThread extends Thread{    private int count = 5;    public SharedSafeThread(String name) {        super();        this.setName(name);    }    @Override    public synchronized void run() {        super.run();        count--;        System.out.println("Thread name: " + Thread.currentThread().getName() + ", count: " + count);    }}public class ThreadRunMain {    public static void main(String[] args) {        testSharedSafeThead();    }    public static void testSharedSafeThead(){        SharedSafeThread sst = new    SharedSafeThread("SharedSafeThread");        Thread a = new Thread(sst,"a");        Thread b = new Thread(sst,"b");        Thread c = new Thread(sst,"c");        Thread d = new Thread(sst,"d");        Thread e = new Thread(sst,"e");        a.start();        b.start();        c.start();        d.start();        e.start();    }}

运行结果:

 

可见线程之间没有互相干扰,count值没有重复,线程安全。

 

转载于:https://www.cnblogs.com/AK47Sonic/p/7653151.html

你可能感兴趣的文章
motion的移植和使用
查看>>
JavaEE PayPal退款流程
查看>>
SpringBoot之logback配置文件
查看>>
css居中,vue
查看>>
Swift 网络库封装整理 MVC + MVVM 两种设计
查看>>
[译]ES6入门(第二部分)
查看>>
移动跨平台开发深度解析
查看>>
(是时候开发属于自己的插件了)数据校验插件开发指南
查看>>
swift 文件修饰符
查看>>
VIPER 和 MVVM 到底有什么区别
查看>>
python
查看>>
启动页
查看>>
1002. Find Common Characters
查看>>
【C#】调用2.0的坑
查看>>
工程优化暨babel升级小记
查看>>
css3新特性总结
查看>>
Javag工程师成神之路(2019正式版)
查看>>
Python2+Selenium入门03-元素定位
查看>>
extract-text-webpack-plugin用法
查看>>
NLPIR引用人工智能技术进行数据深度挖掘
查看>>