多线程实现数据共享

详解ThreadLocal跨线程数据共享的设计和实现 ThreadLocal跨线程数据同步,本质上还是依赖线程之间对象属性的拷贝 阅读详情

Java支持多个线程同时访问一个对象或者对象的成员变量,

使用关键字synchronized可以保证了线程对共享变量访问的可见性和排他性

使用cas机制可以控制线程对共享变量写操作的原子性。

一,使用共享对象和synchronized实现数据共享

   public static void main(String[] args) {
        // 共享的对象
        MyData myData = new MyData();
        // 创建5个线程 传入共享的对象
        for(int i = 0;i<5;i++) {
            new MyThread(myData).start();
        }
        SleepTools.second(5);
        System.out.println("main is ended!最终的值"+myData.getJ());
    }
    //具体操作线程 实现共享对的值+1
    private static class MyThread extends Thread{
        public MyData myData;
        public MyThread(MyData myData) {
            this.myData = myData;
        }
        @Override
        public void run() {
            try {
                //模拟其他业务操作 休眠一秒代替
                TimeUnit.SECONDS.sleep(1);
                //对共享的数据 +1 操作
                synchronized (myData){
                    addNumber();//值加一操作
                }
                //模拟其他业务操作 休眠一秒代替
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        public  void addNumber(){
            System.out.println(Thread.currentThread().getName()+"取值为 ......."+myData.getJ());
            myData.setJ(myData.getJ()+1);
            System.out.println(Thread.currentThread().getName()+"增加一后值......."+myData.getJ());
        }
    }

    // 共享的对象类
    public static class MyData {
        // 共享对象的属性
        private int j = 0;

        public int getJ() {
            return j;
        }
        public void setJ(int j) {
            this.j = j;
        }
    }

运行结果如下:

Thread-3取值为 .......0
Thread-3增加一后值.......1
Thread-0取值为 .......1
Thread-0增加一后值.......2
Thread-1取值为 .......2
Thread-1增加一后值.......3
Thread-2取值为 .......3
Thread-2增加一后值.......4
Thread-4取值为 .......4
Thread-4增加一后值.......5
main is ended!最终的值5

二,使用静态变量和CAS机制实现,本例直接使用原子操作AtomicInteger

    public static AtomicInteger j = new AtomicInteger(0);

    private static class MyRunnable implements Runnable{
        @Override
        public void run() {
            //模拟其他业务操作 休眠一秒代替
            SleepTools.second(1);
            //getAndIncrement 以原子方式将当前值加1,注意,这里返回的是自增前的值
            int andIncrement = j.getAndIncrement();
            System.out.println(Thread.currentThread().getName() + "取值......." + andIncrement);
        }
    }

    public static void main(String[] args) {
        for(int i = 0;i<5;i++) {
            new Thread(new MyRunnable()).start();
        }
        SleepTools.second(5);
        System.out.println("main is ended!"+j);
    }

运行结果:

Thread-0取值.......2
Thread-4取值.......1
Thread-2取值.......3
Thread-3取值.......0
Thread-1取值.......4
main is ended!5

Linux Socket + pthread + pipe 实现socket通信和多线程数据共享 Linux Socket + pthread + pipe 实现socket通信和多线程数据共享 大道至简,基础的东西不能忘,对于网路时代,开发应该都跑不了socket,作为一个基本功,也好久没写写,简单了一个复习下。主要目标复习下socket的同时,复习下linux多线程处理 涉及知识点: 1,socket 2,linux pthread使用 3,信号量(semaphore)、锁(mutex)、管道(pipe)、条件 更多知识点,百度应该比较多了。 代码逻辑: 1,server:最大支持10个链接,当收到 阅读详情

相关推荐

多线程编程:实现同一进程下线程间的数据共享

综上所述,通过合理地使用全局变量和锁,我们可以在同一进程下的多个线程之间实现数据的共享。当然,多线程编程涉及到更多的概念和技术,如线程间通信、线程池等,但本文只介绍了最基本的数据共享问题和解决方案。在并发编程中,多线程是一种常见的方式,可以在同一进程下同时执行多个任务。值得注意的是,在多线程编程中,由于线程是并发执行的,多个线程同时对共享数据进行读写操作可能会导致数据不一致或竞争条件。通过使用锁,我们可以确保在任意时刻只有一个线程可以访问共享数据,从而避免了数据竞争和不一致的问题。在操作完成后,我们使用。

CyberGenius的博客 375

多进程和多线程数据共享

多线程之间的数据共享是通过线程共享同一个进程的内存空间来实现的,因此多个线程可以直接访问相同的内存地址,从而实现数据的共享。这使得多线程编程更加方便,因为不需要像多进程那样使用额外的机制进行进程间通信。然而,多线程共享数据也带来了潜在的问题,比如数据竞争和并发访问问题。当多个线程同时访问共享的数据时,可能会导致数据的不一致性或损坏。因此,在进行多线程编程时,需要合理地处理数据共享,避免数据竞争。

www_z_dd的博客 2820

利用kettle进行数据库数据比对

Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows、Linux、Unix上运行,数据抽取高效稳定。本人用的版本是6.1。 之前用kettle这个开源的ETL工具是用来做数据抽取的,这次测试有个需求,是做数据库数据的比对。验证源表到目标表的逻辑正确,从而利用源表自己写SQL逻辑,生成的结果和目标表去比对。这次想到了利用kettle的数据比较功能,来做这些数据校验。 ...

多米诺DU的专栏 1万+

c++多线程(二)线程间共享数据

线程间共享数据,锁的应用

deroy 1563

西门子PLC与汇川SV660P伺服速度模式配置实战指南

本文详细介绍了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的配置实战指南。从硬件接线、伺服参数配置到TIA Portal软件组态和PLC程序编写,提供了全面的操作步骤和实用技巧,帮助工程师快速解决伺服系统调试中的常见问题,确保系统稳定运行。

weixin_30316097的博客 502

技术前沿:半导体前道检测和量测设备修复技术

半导体前道检测设备是目前除光刻机外,国产渗透率较低的环节之一,近年来我国初步实现国产突破。前道检测相对后道检测环节壁垒更高,国内多家涉及后道测试,涉及前道检测和中道检测相对较少。

VOMMA的博客 4545

如何实现多线程之间的数据共享?

浅拷贝是指只复制对象的基本数据类型,对于对象引用的数据,还是引用原来的对象。这是一种更常见的方式,特别是当你需要创建一个对象的子类或包装原始类型时。然后,我们定义了一个构造函数,该函数接受两个参数(一个整数和一个字符串),并将它们赋值给相应的属性。这种方式允许你在不创建实例的情况下直接调用方法,这可能是对封装类的一部分静态数据进行处理的理想方式。深拷贝是指复制对象中的所有元素,包括对象引用的其他对象。在Java中,对象的实例化通常是通过使用类的构造函数来完成的。的其他方法实现深拷贝(Deep Copy)。

WangYaolove1314的博客 1734

sdc时钟约束2——多驱动时钟

sdc 多驱动时钟 master_clock

qq_40411444的博客 5529

C++并发编程之二 在线程间共享数据

C++并发之探索编程二实战

Awesomewan的博客 1966

USB摄像头开发避坑指南:UVC协议中的Alternate Setting详解

本文深入解析UVC协议中的Alternate Setting机制,这是USB摄像头开发中影响视频流稳定性的关键。文章通过实际案例,详解了Alternate Setting如何管理USB带宽分配,并分析了帧率不达标、图像花屏等典型问题的根源与排查方法,为开发者提供实用的避坑指南和调试技巧。

meat5的博客 240

Unity之ASE如何实现UV扰动闪电效果

UV扰动,顾名思义,就是通过干扰原贴图的UV,使UV发生变化,导致贴图出现会动的效果,如果我们贴图和扰动的速度调整的刚好合适的话,会出现一些非常棒的效果,比如下图所示的闪电效果:好了,一个简单的UV扰动就讲完了,同学们可以发挥想象力,我们是否可以利用UV扰动的原理,做一点别的炫酷的效果出来,比如,交错流动,流光效果等等。很期待你的留言,这篇文章就到这里,希望对你有所帮助。

TxNet 1792

java多线程实现数据共享

练习题:卖100个苹果,实现数据共享。新建一个线程有两种方式:1.继承Thread类;2.是实现Runnable的方式:那我们就先使用第一种方式来实现:使用Thread实现数据的共享第一步:写一个了ShareThread继承Thread,并在ShareThread定义一个静态的Apple_Counts变量(注意:Apple_Counts因为是静态的,所以是共享数据) /** * 存在

liujun2son 2651

AUTOSAR 导入DBC ISOLAR工程配置

ISOLAR工程配置-dbc导入

汽车电子电气 2408

多线程实现数据不共享与数据共享

数据不共享 要实现多线程数据不共享,让每个线程独立,再调用自己的start( )方法即可。因为Java会为每一个对象创建各自的局部变量和空间,因此要实现数据不共享,只要让每个线程中使用的资源数据不是同一个对象的即可。代码如下(用Runnable接口实现): public class MyRunnable implements Runnable{ private int count=5; ...

weixin_43184215的博客 1526

红米k60 修复“NV损坏” 去除主板校验电阻步骤解析与图示

红米k60 基带代码:mondrian。搭载‌高通骁龙8+ Gen1处理器.国外版本称:POCO F5 Pro适用于以下型号的小米机型:23013RK75C, 23013PC75G。 💝💝💝通过博文了解 1💝💝💝-----此机型修复NV损坏硬件类操作主板图示 2💝💝💝-----了解设备出现NV损坏的底层逻辑 3💝💝💝 ------具体修改步骤

小马哥的专栏 400

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java runnable实现共享_java 中的多线程 内部类实现 数据共享 和 Runnable实现数据共享...

/*java 中Runnable的好处 可以实现共享一个数据在一个类已经从其他类派生的时候 我们不能使用 直接从Thread类派生 那么这时候我们可以通过实现Runnable接口来实现class Test{public static void main(String []args) throws Exception{NewThread nt=new NewThread();new Th...

weixin_35315373的博客 311

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java 中的多线程 内部类实现 数据共享 和 Runnable实现数据共享

/* java 中Runnable的好处    可以实现共享一个数据     在一个类已经从其他类派生的时候 我们不能使用 直接从Thread类派生  那么这时候我们可以通过实现Runnable 接口来实现    class Test  {     public

Programmer小卫 5343

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java 多线程共享数据_Java多线程并发09——如何实现线程间与线程内数据共享

本文将为各位带来有关 Java 线程内数据共享的方法。关注我的公众号「Java面典」了解更多 Java 相关知识点。线程间数据共享Java 里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见性和有序性原子性。Java 内存模型(JMM)解决了可见性和有序性的问题,而锁解决了原子性的问题,理想情况下我们希望做到“同步”和“互斥”。有以下常规实现方法:将数据抽象成一个类将...

weixin_33377602的博客 302

Codex 技能目录 skills:3 种安装方式,装完就能复用

每次让 AI 代理做同一件事,都要重新粘贴一大段指令?GitHub_Trending/skills4/skills 就是给 Codex 用的技能目录:把特定任务的指令、脚本、资源打包进一个文件夹,一次编写,到处复用。 ## 白话讲清:技能是什么,给谁用 一个技能(skill)相当于给 AI 代理打包好的任务模板。比如 [skills/.curated/](https://link.gitcod

gitblog_00835的博客 944

Java---12---多线程练习:卖票---实现数据共享

做一个练习:卖票小程序,实现数据共享。   我们先来创建线程,和主线程交替运行。   这个就比较简单了: 就以继承Thread类的方式来说吧: class MyThread extends Thread { private int num = 150; private String name; public MyThread(String name)

bobo 2113

java核心知识点学习----多线程间的数据共享的几种实现方式比较

需求:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j减少1. 实现数据共享的几种方式比较: 1.使用同一个runnable对象 如果每个线程执行的代码相同,那么可以使用同一个runnable对象,这个runnable有那个共享数据,例如,卖票系统就是这么做的. 如下例所示: ... public static void main(String[] args) {...

weixin_33720078的博客 275

多线程间的数据共享的几种实现方式比较

需求:设计4个线程,其中两个线程每次对j增加1,另外两个线程对j减少1. 实现数据共享的几种方式比较: 1.使用同一个runnable对象 如果每个线程执行的代码相同,那么可以使用同一个runnable对象,这个runnable有那个共享数据,例如,卖票系统就是这么做的. 如下例所示: ... public static void main(String[

lwj0310的专栏 6603

foobar2000 界面美化指南:foobox-cn 皮肤 4 步装好,5 类面板自由组合

装好 foobar2000 之后,大多数人盯着原生界面只干了两件事:加歌、点播放。界面既不能按模块拼,切歌后想看看歌手背景也没地方看,多份歌单更是切来切去。foobox-cn 是一套挂在 foobar2000 上的 DUI 皮肤配置,把窗口拆成播放列表、封面、简介、可视化等 5 类面板,随你拼。 [![foobox-cn 亮色主题下 foobar2000 界面美化效果](https://raw.

gitblog_00241的博客 829
上一篇: el-tree 实现单选功能
下一篇: SQL分页查询的写法总结-MySQL、SQL Server、Oracle
一地红尘
博客等级 码龄12年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值