1. /**
    * Created by chengtao on 17/12/3.
    * 多个线程 如何共享数据?
    * 常见实例:多个窗口同时售卖火车票
    */
    public class Thread0701_MultiThreadShareData {
    public static void main(String[] args) {
    SaleTicket data1 = new SaleTicket();
    new Thread(data1).start();
    new Thread(data1).start();
    }
  2.  
  3. static class SaleTicket implements Runnable{
    private int count = 100;
    public void run() {
    while (true){
    synchronized (this){
    if(count>0){
    count--;
    System.out.println( Thread.currentThread().getName() + " 剩余票数 " + count);
    }
    }
    }
    }
    }
    }
  4.  
  5. /*
    以上代码 适用于 执行方法相同的场景,因为执行的代码相同,
    所以多个线程可以 传入同一个runnable接口的实现类,在实现类中定义和处理数据
    进而实现数据的共享
  6.  
  7. 如果 线程执行的代码不同:如有的线程对变量加一 有的线程对变量减一
    */
  8.  
  9. -----------------------------
    -----------------------------
    -----------------------------
  1. /**
    * Created by chengtao on 17/12/3.
    */
    public class Thread0702_MultiThreadShareData {
  2.  
  3. private static ShareData1 data1 = new ShareData1();
  4.  
  5. public static void main(String[] args) {
    ShareData1 data2 = new ShareData1();
    new Thread(new MyRunnable1(data2)).start();
    new Thread(new MyRunnable2(data2)).start();
  6.  
  7. final ShareData1 data1 = new ShareData1();
    new Thread(new Runnable(){
    public void run() {
    data1.decrement();
  8.  
  9. }
    }).start();
    new Thread(new Runnable(){
    public void run() {
    data1.increment();
  10.  
  11. }
    }).start();
  12.  
  13. }
  14.  
  15. }
  16.  
  17. class MyRunnable1 implements Runnable{
    private ShareData1 data1;
    public MyRunnable1(ShareData1 data1){
    this.data1 = data1;
    }
    public void run() {
    data1.decrement();
  18.  
  19. }
    }
  20.  
  21. class MyRunnable2 implements Runnable{
    private ShareData1 data1;
    public MyRunnable2(ShareData1 data1){
    this.data1 = data1;
    }
    public void run() {
    data1.increment();
    }
    }
  22.  
  23. class ShareData1 {
    private int j = 0;
    public synchronized void increment(){
    j++;
    }
  24.  
  25. public synchronized void decrement(){
    j--;
    }
    }

java 多线程 day07 多线程共享数据的更多相关文章

  1. Java基础-线程操作共享数据的安全问题

    Java基础-线程操作共享数据的安全问题 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.引发线程安全问题 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运 ...

  2. Java笔记16:多线程共享数据

    一.Thread实现 public class ThreadDemo4 { publicstaticvoid main(String[] args) { new ThreadTest4().start ...

  3. JAVA 并发编程-多个线程之间共享数据

    原文地址:http://blog.csdn.net/hejingyuan6/article/details/47053409# 多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个R ...

  4. JAVA 并发编程-多个线程之间共享数据(六)

    多线程共享数据的方式: 1.假设每一个线程运行的代码同样.能够使用同一个Runnable对象,这个Runnable对象中有那个共享数据,比如,卖票系统就能够这么做. 2,假设每一个线程运行的代码不同. ...

  5. 【转】JAVA 并发编程-多个线程之间共享数据

    原文地址:http://blog.csdn.net/hejingyuan6/article/details/47053409# 多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个R ...

  6. java基础多线程之共享数据

    java基础巩固笔记5-多线程之共享数据 线程范围内共享数据 ThreadLocal类 多线程访问共享数据 几种方式 本文主要总结线程共享数据的相关知识,主要包括两方面:一是某个线程内如何共享数据,保 ...

  7. JAVA笔记14__多线程共享数据(同步)/ 线程死锁 / 生产者与消费者应用案例 / 线程池

    /** * 多线程共享数据 * 线程同步:多个线程在同一个时间段只能有一个线程执行其指定代码,其他线程要等待此线程完成之后才可以继续执行. * 多线程共享数据的安全问题,使用同步解决. * 线程同步两 ...

  8. JAVA多线程提高四:多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

  9. JAVA多线程学习八-多个线程之间共享数据的方式

    多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...

随机推荐

  1. sql 使用整理

    今天使用视图查询东西,为了方便直接select * 查出来的都行全部都错乱了,看来sql 超过20个以上的字段为了效率和安全,禁止用select * -------------查一个表的所有字段的-- ...

  2. 第二百七十五节,MySQL数据库安装和介绍

    MySQL数据库安装 一.概述 1.什么是数据库 ? 答:数据的仓库,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access.MS SQL Server等 ? 答:他们均是一种 ...

  3. Unity获取文件夹下指定类型的文件数量

    有个文件夹里面有很多的图片,都是.png格式的,要是一个一个的拖到脚本上觉得很麻烦,就写了一个遍历添加的cars,变量是List<Sprite> 代码如下: using UnityEngi ...

  4. 登陆Oracle11g的企业管理器

    本地:https://localhost:1158/em/ 如果远程:那么把localhost换成服务器IP

  5. 数据库存入数据后id保持不变,或者直接报错

    数据库存入数据后id保持不变,且添加的数据一直在进行覆盖 或者直接报错 数据库存入数据后id保持不变,且添加的数据一直在进行覆盖 原因是: 之前注释掉了loadimage();在该函数中含有建立新的记 ...

  6. 编写jsp动态网页

    默认情况下,jsp网页必须保存在TOMCAT_HOME/webapps 目录下才能被客户请求. JSP网页的主题仍然是html标签,在需要显示动态数据的地方添加<%%>标记,在其中编写合法 ...

  7. c#基础 第二讲

    判断一个人的体重是否为标准体重 计算公式:男生:体重(kg)-身高+100=±3(在此范围内为标准体重) 女生:体重(kg)-身高+110=±3 using System; using System. ...

  8. .NET 4.0 中的契约式编程

    契约式编程不是一门崭新的编程方法论.C/C++ 时代早已有之.Microsoft 在 .NET 4.0 中正式引入契约式编程库.博主以为契约式编程是一种相当不错的编程思想,每一个开发人员都应该掌握.它 ...

  9. QQ空间的文艺打开方法

    QQ空间被限制?打不开? 看看这里 第一种:http://user.qzone.qq.com/627911903 第二种:http://627911903.qzone.qq.com 第三种:http: ...

  10. 170316、spring4:@Cacheable和@CacheEvict实现缓存及集成redis

    注:1.放入cache中,采用@Cacheable;使缓存失效@CacheEvict 2.自定义CacheManager只需要继承org.springframework.cache.support.A ...