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--;
    }
    }
  • 相关阅读:
    Redis&PHP的使用安装-windows版
    【JAVA】使用Eclipse依赖生成jar包时,避免最外层同时生成资源文件的配置。
    【ActiveMQ】重写监听
    【ActiveMQ】设置自动重连
    【ActiveMQ】持久化消息队列的三种方式
    【Spring】手动获取spring容器对象时,报no qualifying bean of type is defined
    【监控】使用probe对tomcat服务进行监控
    【前端】使用weinre对手机、微信浏览器页面调试
    【前端】一句命令快速合并压缩 JS、CSS
    【前端】CSS雪碧
  • 原文地址:https://www.cnblogs.com/ctaixw/p/7967929.html
Copyright © 2011-2022 走看看