zoukankan      html  css  js  c++  java
  • 7.多个线程之间共享数据的方式探讨-JDK5多线程

     1 /**
     2  * 多个线程之间共享数据的方式探讨
     3  * @author LiTaiQing
     4  * 
     5  * *************************************************
     6  * 如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,有
     7  * 如下两种方式来实现这些Runnble对象之间的数据共享:
     8  *         1.将共享数据封装在另外一个对象中,然后将这个对象逐一传递给
     9  * 各个Runnble对象。每个线程对共享数据的操作方法也分配到那个对象身
    10  * 上去完成,这样容易实现针对该数据进行的各个操作的互斥和通信。
    11  *         2.将这些Runnable对象作为某一个类中的内部类,共享数据作为
    12  * 这个外部类中的成员变量,每个线程对共享数据的操作方法也分配给外部类,
    13  * 以便实现对共享数据进行的各个操作的互斥和通信,作为内部类的各个Runnble
    14  * 对象调用外部类的这些方法。
    15  *         上面两种方式的组合:将共享数据封装在另一个对象中,每个线程对
    16  * 共享数据的操作方法也分配到那个对象身上去完成,对象作为这个外部类中的
    17  * 成员变量或方法中的局部变量,每个线程的Runnable对象作为外部类中的
    18  * 成员内部类或局部内部类。
    19  *         总之,要同步互斥的极短代码最好是分别放在几个独立的方法中,这些
    20  * 方法再放在同一个类中,这样比较容易实现它们之间的同步互斥和通信。
    21  * *************************************************
    22  *
    23  */
    24 public class MultiThreadShareData {
    25     
    26     private static ShareData1 data1 = new ShareData1();
    27     
    28     public static void main(String[] args) {
    29         
    30         final ShareData1 data2 = new ShareData1();
    31         new Thread(new MyRunnable1(data1)).start();
    32         new Thread(new MyRunnable1(data2)).start();
    33         
    34         final ShareData1 data1 = new ShareData1();
    35         new Thread(new Runnable(){
    36             @Override
    37             public void run() {
    38                 data1.decrement();
    39             }
    40         }).start();
    41         new Thread(new Runnable(){
    42             @Override
    43             public void run() {
    44                 data1.increment();
    45             }
    46         }).start();
    47     }
    48     
    49     
    50 }
    51 
    52 class MyRunnable1 implements Runnable{
    53     
    54     private ShareData1 data1;
    55 
    56     public MyRunnable1(ShareData1 data1){
    57         this.data1 = data1;
    58     }
    59     
    60     @Override
    61     public void run() {
    62         data1.decrement();
    63     }
    64 }
    65 
    66 class MyRunnable2 implements Runnable{
    67     
    68     private ShareData1 data1;
    69 
    70     public MyRunnable2(ShareData1 data1){
    71         this.data1 = data1;
    72     }
    73     
    74     @Override
    75     public void run() {
    76         data1.increment();
    77     }
    78 }
    79 
    80 class ShareData1 /*implements Runnable*/{
    81     
    82     private int count = 100;
    83     
    84     private int j = 0;
    85     public synchronized void increment(){
    86         j++;
    87     }
    88     public synchronized void decrement(){
    89         j--;
    90     }
    91 //    @Override
    92 //    public void run() {
    93 //        while(true){
    94 //            count--;
    95 //        }
    96 //    }
    97     
    98 }
  • 相关阅读:
    python map 详解
    python 中的集合(set) 详解
    python中的列表(list) 切片详解
    django 创建数据库表 命令
    django如何检查创建的模型(model)是否有语法错误或者逻辑错误
    python 列表(list)去除重复的元素总结
    python中的 zip函数详解
    django post和get 比较
    正则表达式的特殊符号和字符详细解析
    .NET/MVC-发布到IIS6.1提示未能加载程序集System.Web.Http.WebHost
  • 原文地址:https://www.cnblogs.com/litaiqing/p/4635166.html
Copyright © 2011-2022 走看看