Java多线程进一步理解之----------线程共享数据

简介: 说起线程共享数据有几种方式,1.使用公共集合类来实现,代码很简单就不多解释:public class TestThreadShareData { private static int data = 0;...

说起线程共享数据有几种方式,

1.使用公共集合类来实现,代码很简单就不多解释:

public class TestThreadShareData {
    private static int data = 0;
    private static Map<Thread,Integer> map = new HashMap<Thread,Integer>();
    public static void main(String[] args) {
        for (int i = 0; i < 2; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    data = new Random().nextInt();
                    map.put(Thread.currentThread(), data);
                    System.out.println("main" + Thread.currentThread().getName() + "data=" + data);
                    new A().get();
                    new B().get();
                }
            }).start();
        }
    }
    static class A {
        public void get() {
            data = map.get(Thread.currentThread());
            System.out.println("A from main"+Thread.currentThread().getName() + "data = "+data);
        }
    }
    static class B {
        public void get() {
            data = map.get(Thread.currentThread());
            System.out.println("B from main"+Thread.currentThread().getName() + "data = "+data);
        }
    }
}

2.使用互斥的访问机制

public class doThreadShareData {
    //java.util.concurrent
    public static void main(String[] args) {
        ShareData shareData =new ShareData();
        new Thread(new Runnable() {
            @Override
            public void run() {
                shareData.deccreament();
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                shareData.increment();
            }
        }).start();
    }

}
class ShareData {
    private int j = 0;
    public synchronized void increment(){
        j++;
    }
    public synchronized void deccreament(){
        j--;
    }
}

 

相关文章
|
14天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
35 2
|
7天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。
|
2天前
|
Java API 调度
Java 多线程编程详解
《Java多线程编程详解》深入浅出地讲解了Java平台下的多线程核心概念、API使用及最佳实践。从基础理论到实战案例,本书帮助读者掌握并发编程技巧,提升软件开发中的效率与性能,是Java开发者不可或缺的参考指南。
|
2天前
|
安全 Java 调度
理解 Java 中的多线程编程
本文深入探讨了Java中的多线程编程,涵盖线程创建与管理、同步机制、锁及死锁避免策略。介绍了通过继承`Thread`类或实现`Runnable`接口创建线程的方法,并讨论了线程的生命周期状态。此外,还讲解了如何使用`ExecutorService`线程池以及`java.util.concurrent`包中的工具类来简化并发编程。理解这些概念和技术,有助于开发高效稳定的多线程应用程序。
|
Java C语言 C++
Java 的数据类型划分(数据类型划分)| 学习笔记
快速学习 Java 的数据类型划分(数据类型划分)
112 0
Java 的数据类型划分(数据类型划分)| 学习笔记
|
Java 开发者 Windows
Java 数据类型划分(字符型)|学习笔记
快速学习 Java 数据类型划分(字符型)
122 0
|
Java 开发者
Java 数据类型划分(整型类型)|学习笔记
快速学习 Java 数据类型划分(整型类型)
|
Java 开发者
Java 数据类型划分(初见 String 类)|学习笔记
快速学习 Java 数据类型划分(初见 String 类)
|
Java 开发者
Java 数据类型划分(布尔型)|学习笔记
快速学习 Java 数据类型划分(布尔型)
|
3天前
|
Java 关系型数据库 MySQL
如何用java的虚拟线程连接数据库
本文介绍了如何使用Java虚拟线程连接数据库,包括设置JDK版本、创建虚拟线程的方法和使用虚拟线程连接MySQL数据库的示例代码。
17 6
如何用java的虚拟线程连接数据库