• 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--;
    }
    }
  • 相关阅读:
    第一讲小结(位运算)
    新学期开始
    前缀表达式-怎样用空格分隔一个字符串
    计概期末前的小小总结
    动规作业-求数组不相邻元素之和的最大值
    网格-递归作业2-放苹果问题
    1025 数的划分(搜索和递推方法)
    网格-递归作业 集合里的乘法
    网格-递归作业 城堡问题
    去先导零的一个大坑
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7967929.html
Copyright © 2020-2023  润新知