zoukankan      html  css  js  c++  java
  • java 多线程 day07 多线程共享数据


    /**
    * 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();
    }

    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);
    }
    }
    }
    }
    }
    }

    /*
    以上代码 适用于 执行方法相同的场景,因为执行的代码相同,
    所以多个线程可以 传入同一个runnable接口的实现类,在实现类中定义和处理数据
    进而实现数据的共享

    如果 线程执行的代码不同:如有的线程对变量加一 有的线程对变量减一
    */

    -----------------------------
    -----------------------------
    -----------------------------

    /**
    * Created by chengtao on 17/12/3.
    */
    public class Thread0702_MultiThreadShareData {

    private static ShareData1 data1 = new ShareData1();

    public static void main(String[] args) {
    ShareData1 data2 = new ShareData1();
    new Thread(new MyRunnable1(data2)).start();
    new Thread(new MyRunnable2(data2)).start();

    final ShareData1 data1 = new ShareData1();
    new Thread(new Runnable(){
    public void run() {
    data1.decrement();

    }
    }).start();
    new Thread(new Runnable(){
    public void run() {
    data1.increment();

    }
    }).start();

    }

    }

    class MyRunnable1 implements Runnable{
    private ShareData1 data1;
    public MyRunnable1(ShareData1 data1){
    this.data1 = data1;
    }
    public void run() {
    data1.decrement();

    }
    }

    class MyRunnable2 implements Runnable{
    private ShareData1 data1;
    public MyRunnable2(ShareData1 data1){
    this.data1 = data1;
    }
    public void run() {
    data1.increment();
    }
    }

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

    public synchronized void decrement(){
    j--;
    }
    }
  • 相关阅读:
    快速构建ceph可视化监控系统
    Codeforces Round #277.5 解题报告
    【MapReduce】经常使用计算模型具体解释
    Unity3D教程:静态调用C#的dll
    【Oracle错误集锦】:PLSQL无法直连64位Oracle11g数据库
    关于ios下字体描边的一个细节
    未来社交站点:15秒内让你闻名全球 虚拟现实与社交网络融合
    iOS多语言(国际化)开发(尾随系统 + APP内手动设置)
    Java String对象的经典问题
    jsp+tomcat+ 创建project 配置project
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7967929.html
Copyright © 2011-2022 走看看