Android多线程研究(5)线程之间共享数据

一、如果是每个线程都执行相同的代码,则可以使用同一个Runnable来实现共享

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

    static class ShareData implements Runnable{
        private int j = 100;
        @Override
        public synchronized void run() {
            j--;
        }
    }
}

上面代码中两个线程共享数据实现对j变量的递减操作,至于上面代码中为什么要使用一个静态内部类,该类static的作用是不依赖外部类的实例创建对象。

二、如果每个线程执行的代码不同,则需要使用不同的Runnable对象来实现共享

public class MultiThreadShareData {
    public static void main(String[] args) {
        final ShareData data1 = new ShareData();
        //启动第一个线程
        new Thread(new Runnable() {  

            @Override
            public void run() {
                data1.increment(); //加
            }
        }).start();
        //启动第二个线程
        new Thread(new Runnable() {  

            @Override
            public void run() {
                data1.decrement();  //减
            }
        }).start();
    }  

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

        public synchronized void decrement(){
            j--;
        }
    }
}

将上面代码进修改(将数据作为外部类的成员变量,让Runnable接口操作该成员变量)如下:

public class MultiThreadShareData {
    public static void main(String[] args) {
        ShareData data1 = new ShareData();
        new Thread(new MyRunnable1(data1)).start();
        new Thread(new MyRunnable2(data1)).start();
    }  

    static class MyRunnable1 implements Runnable{
        private ShareData data1;
        public MyRunnable1(ShareData data1){
            this.data1 = data1;
        }
        @Override
        public void run() {
            data1.increment();
        }  

    }  

    static class MyRunnable2 implements Runnable{  

        private ShareData data1;  

        public MyRunnable2(ShareData data2){
            this.data1 = data1;
        }  

        @Override
        public void run() {
            data1.decrement();
        }  

    }  

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

        public synchronized void decrement(){
            j--;
        }
    }
}

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索线程
, static
, new
, runnable
, public
, void
Android共享数据
多线程共享变量、java多线程共享变量、java多线程数据共享、多线程数据共享、python多线程共享变量,以便于您获取更多的相关知识。

时间: 2024-12-29 05:45:27

Android多线程研究(5)线程之间共享数据的相关文章

Android多线程研究(6)多线程之间数据隔离

在上一篇<Android多线程研究(5)--线程之间共享数据>中对线程之间的数据共享进行了学习和研究,这一篇我们来看看如何解决多个线程之间的数据隔离问题,什么是数据隔离呢?比如说我们现在开启了两个线程,这两个线程都要同时给同一个全局变量data赋值,各个线程操作它赋值后的变量数据,这里就需要用到隔离.先看一段代码: import java.util.Random; public class ThreadLocalTest { private static int data = 0; publi

线程间共享数据无需竞争

原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke's程序框架创新奖.本文将用图表的方式为大家介绍Disruptor是什么,用来做什么,以及简单介绍背后的实现原理. Disruptor是什么? Disruptor 是线程内通信框架,用于线程里共享数据.LMAX 创建Disruptor作为可靠消息架构的一部分并将它设计成一种在不同组件中共享数据非常快的方法. 基于Mechanical Sympathy(对于计算机底层硬

Android编程实现两个Activity之间共享数据及互相访问的方法_Android

本文实例讲述了Android编程实现两个Activity之间共享数据及互相访问的方法.分享给大家供大家参考,具体如下: 本人从windows编程转过来学习Android开发,一直在想如果两个Activity之间能够像C#或delphi中的Form一样,可以直接访问其成员(字符.数值.成员对象等),并能调用其公开的方法,那应该比用Intent来传递数据直接方便的多,于是偿试了如下办法,测试基本没有问题,发出来大家讨论一下.本人学习android不久,幼稚的地方希望大家不要见笑 原理:假设有两个Ac

Android编程实现两个Activity之间共享数据及互相访问的方法

本文实例讲述了Android编程实现两个Activity之间共享数据及互相访问的方法.分享给大家供大家参考,具体如下: 本人从windows编程转过来学习Android开发,一直在想如果两个Activity之间能够像C#或delphi中的Form一样,可以直接访问其成员(字符.数值.成员对象等),并能调用其公开的方法,那应该比用Intent来传递数据直接方便的多,于是偿试了如下办法,测试基本没有问题,发出来大家讨论一下.本人学习android不久,幼稚的地方希望大家不要见笑 原理:假设有两个Ac

VC中利用多线程技术实现线程之间的通信

文章来源:[url]http://www.programfan.com/article/showarticle.asp?id=2951[/url] 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.

安卓应用开发-Android 与webservice与mysql之间的数据交互

问题描述 Android 与webservice与mysql之间的数据交互 十分想弄明白Android 与webservice与mysql怎么进行数据交互,希望哪位大神能够给个完整的源码我看看,只需实现一个数据的交互,简单我才好懂,我看懂了就会举一反三了,谢谢

vc 基于对话框多线程编程实例——线程之间的通信

 vc基于对话框多线程编程实例--线程之间的通信 实例:  

提升Docker效率的小操作——用volume实现容器和主机之间共享数据 [转载]

说在前面 Docker是一个非常强大的工具,它帮助企业扩大产品规模,并简化部署容器化应用程序的流程.对于Docker来说,创建一个容器实际上非常简单:您只需要拉取一个镜像,并将其部署成容器就可以了.但是这个容器该如何保存数据呢?换言之,您要如何处理这些数据呢?又或者说,您要如何在容器之间共享这些数据呢? Docker 容器的机制是由一系列只读层构成,其最上层包含一个最终的读写层.这是一个非常复杂的系统--称为联合文件系统(UFS). 当您不需要保留数据时,该文件系统可以很好的完成该任务.但是,当

Android多线程研究(7)Java5中的线程并发库

从这一篇开始我们将看看Java 5之后给我们添加的新的对线程操作的API,首先看看api文档: java.util.concurrent包含许多线程安全.测试良好.高性能的并发构建块,我们先看看atomic包下的AtomicInteger. import java.util.concurrent.atomic.AtomicInteger; public class AtomicIntegerTest { private static AtomicInteger data = new Atomic