zoukankan      html  css  js  c++  java
  • 多线程篇五:多个线程访问共享对象和数据的方式

    1.多个线程共享一个变量实现方式1 :  将共享数据封装当另外一个对象中,然后将这个对象传递给各个Runnable对象

    package com.test.shareData;
    
    /**
     * 多个线程共享一个变量:1.将共享数据封装当另外一个对象中,然后将这个对象传递给各个Runnable对象
     * @author Administrator
     *
     */
    public class MultiThreadShareData {
    
        public static void main(String[] args) {
            ShareData data1=new ShareData();
            new Thread(new MyRunnable1(data1)).start();
            new Thread(new MyRunnable2(data1)).start();
            System.out.println("mian: "+data1.getCount());
        }
    
    }
    
    
    class MyRunnable1 implements Runnable{
        private ShareData data1;
        public MyRunnable1(ShareData data){
            this.data1=data;
        }
        @Override
        public void run() {
            data1.increment();
            System.out.println("MyRunnable1:"+data1.getCount());
        }
    }
    
    class MyRunnable2 implements Runnable{
        private ShareData data2;
        public MyRunnable2(ShareData data){
            this.data2=data;
        }
        @Override
        public void run() {
            data2.increment();
            System.out.println("MyRunnable2:"+data2.getCount());
        }
    }
    
     class ShareData{
        private int count=100;
        void increment(){
            count++;
        }
        
        public int getCount() {
            return count;
        }
    }
    View Code

    2.多个线程共享一个变量实现方式2 : 将多个Runnable对象作为一个类的内部了,将共享变量作为外部类的成员变量

    package com.test.shareData;
    
    /**
     * 多个线程共享一个变量:2.将多个Runnable对象作为一个类的内部了,将共享变量作为外部类的成员变量
     * @author Administrator
     *
     */
    public class MultiThreadShareData1 {
        static ShareData1 data1=new ShareData1();
        public static void main(String[] args) {
            new Thread(new Runnable(){
                @Override
                public void run() {
                    data1.increment();
                }
            }).start();
            new Thread(new Runnable(){
                @Override
                public void run() {
                    data1.decrement();
                }
            }).start();
            System.out.println("mian: "+data1.getCount());
            //mian: 102
        }
    }
    
    
     class ShareData1{
        private int count=100;
        void increment(){
            count++;
        }
        void decrement(){
            count--;
        }
        
        public int getCount() {
            return count;
        }
    }
    View Code

    3.测试题 : 4个线程,其中两个每次对j加1,另外两个每次对j减1

    package com.test.shareData;
    
    /**
     * 4个线程,其中两个每次对j加1,另外两个每次对j减1
     * @author Administrator
     *
     */
    public class MultiThreadShareDataTest {
        private int j;
        
        public static void main(String[] args) {
            MultiThreadShareDataTest test=new MultiThreadShareDataTest();
            IncTest in =test.new IncTest();
            DecTest de =test.new DecTest();
            for(int i=0;i<2;i++){
                Thread t1=new Thread(in);
                t1.start();
    
                t1=new Thread(de);
                t1.start();
            }
        }
        
        private synchronized void inc(){
            j++;
            System.out.println("Current Thread :"+Thread.currentThread().getName()+" j:"+j);
        }
        
        private synchronized void dec(){
            j--;
            System.out.println("Current Thread :"+Thread.currentThread().getName()+" j:"+j);
        }
         
         
        class IncTest implements Runnable{
                @Override
                public void run() {
                    for(int i=0;i<100;i++){
                        inc();
                    }
                }
        }
         
        class DecTest implements Runnable{
                @Override
                public void run() {
                    for(int i=0;i<100;i++){
                        dec();
                    }
                }
        }
    }
    View Code
  • 相关阅读:
    MySQL<事务与存储过程>
    MySQL<多表操作>
    MySQL<表单&集合查询>
    统计 fastq 文件 q20 , GC 含量的软件
    C语言插入排序
    samtools flags 的含义
    vsearch 去除重复序列和singleton 序列
    Fastqc 能够识别的碱基编码格式
    Fastqc 碱基质量分布图
    利用kseq.h parse fasta/fastq 文件
  • 原文地址:https://www.cnblogs.com/brant/p/6017876.html
Copyright © 2011-2022 走看看