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

目录
相关文章
|
2天前
|
Java
jvm复习,深入理解java虚拟机一:运行时数据区域
这篇文章深入探讨了Java虚拟机的运行时数据区域,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区、元空间和运行时常量池,并讨论了它们的作用、特点以及与垃圾回收的关系。
29 19
jvm复习,深入理解java虚拟机一:运行时数据区域
|
2天前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
16 6
如何用java的虚拟线程连接数据库
|
2天前
|
Java 调度
Java一个线程的生命周期详解
Java中,一个线程的生命周期分为五个阶段:NEW(新建),RUNNABLE(可运行),BLOCKED(阻塞),WAITING(等待),TERMINATED(终止)。线程创建后处于新建状态,调用start方法进入可运行状态,执行中可能因等待资源进入阻塞或等待状态,正常完成或异常终止后进入终止状态。各状态间可相互转换,构成线程的生命周期。
|
2天前
|
Java API 调度
Java 多线程编程详解
《Java多线程编程详解》深入浅出地讲解了Java平台下的多线程核心概念、API使用及最佳实践。从基础理论到实战案例,本书帮助读者掌握并发编程技巧,提升软件开发中的效率与性能,是Java开发者不可或缺的参考指南。
|
1天前
|
安全 Java 调度
理解 Java 中的多线程编程
本文深入探讨了Java中的多线程编程,涵盖线程创建与管理、同步机制、锁及死锁避免策略。介绍了通过继承`Thread`类或实现`Runnable`接口创建线程的方法,并讨论了线程的生命周期状态。此外,还讲解了如何使用`ExecutorService`线程池以及`java.util.concurrent`包中的工具类来简化并发编程。理解这些概念和技术,有助于开发高效稳定的多线程应用程序。
|
2天前
|
Java 开发者
农行1面:Java如何保证线程T1,T2,T3 顺序执行?
本文探讨了如何保证线程T1、T2、T3的顺序执行,这是农行面试中的一道题目,旨在考察候选人对多线程基础、同步机制、线程间通信及Java并发包的掌握情况。文章详细介绍了六种方法:`join()`、`CountDownLatch`、`Semaphore`、单线程池、`synchronized` 和 `CompletableFuture`,并通过示例代码展示了每种方法的具体实现。这些方法不仅适用于面试备考,还能帮助开发者更好地理解和掌握线程同步技术。
22 2
|
Java C语言 C++
Java 的数据类型划分(数据类型划分)| 学习笔记
快速学习 Java 的数据类型划分(数据类型划分)
112 0
Java 的数据类型划分(数据类型划分)| 学习笔记
|
Java 开发者 Windows
Java 数据类型划分(字符型)|学习笔记
快速学习 Java 数据类型划分(字符型)
122 0
|
Java 开发者
Java 数据类型划分(整型类型)|学习笔记
快速学习 Java 数据类型划分(整型类型)
|
Java 开发者
Java 数据类型划分(初见 String 类)|学习笔记
快速学习 Java 数据类型划分(初见 String 类)