开发者社区> 神巧合> 正文

java多线程通信之共享数据

简介: (1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做。 public class MutiThreadShareData {     public static void main(String[] args) {                   ShareData data=new ShareData()
+关注继续查看

wKiom1ZU_pmwHfbWAACtviSDEcQ100.png

(1)当访问共同的代码的时候:可以使用同一个Runnable对象这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做。

public class MutiThreadShareData {

    public static void main(String[] args) {
        
         ShareData data=new ShareData();
        
         new Thread(data).start();
         new Thread(data).start();
        
    }


}


class ShareData implements Runnable {

    private int count = 10000;

    @Override
    public  void run() {
      while(true){
          synchronized (this) {
                count--;    
        };
         System.out.println(Thread.currentThread().getName()+":"+count);
      }
    }

}


(2)当各个线程访问的代码不同时:这时候需要使用不同的Runnable对象


public class MutiThreadShareData {

    public static void main(String[] args) {
        
        final ShareData data=new ShareData();
        
        
        
        new Thread(new Runnable() {

            @Override
            public void run() {
                while(true){
                data.increment();
                }

            }
        }).start();

        new Thread(new Runnable() {

            @Override
            public void run() {
                while(true){
                data.decrement();
                }
            }
        }).start();
    }


}


class ShareData  {

    private int j=2000;
    public synchronized void increment(){
        j++;
        System.out.println(Thread.currentThread().getName()+":"+j);
    }
    public synchronized void decrement(){
        j--;
        System.out.println(Thread.currentThread().getName()+":"+j);
    }
}


参考文章:

http://my.oschina.net/u/248570/blog/53226





 

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1693465

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
封装多线程处理大量数据操作
们需要解决WaitAny和取得异步执行的返回值的问题。地球人都知道Thread和ThreadPool接受的委托都是没有返回值的。要想取的返回值,我们就得自己动手了,我们需要构造一个AsyncContext类,由这个类来保存异步执行的状态以并存储返回值。
643 0
ML之SLR:简单线性回归;根据多组数据(x,y)模拟得到一次线性方程(斜率和截距),然后输入新的x来智能预测y值
ML之SLR:简单线性回归;根据多组数据(x,y)模拟得到一次线性方程(斜率和截距),然后输入新的x来智能预测y值
41 0
Java 使用轮询获取线程返回数据
本文目录 1. 多线程的特点 2. 使用轮询强制等待 3. 轮询的弊端 4. 小结
77 0
基于Boost的数据处理器及线程安全类和信号量
http://download.csdn.net/download/great3779/3998262
714 0
+关注
346
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载