• 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。


    方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程。

    package com.jn.test;
    
    public class ManyThreads {
    	private int j;
    	
    	private synchronized void inc(){
    		j++;
    		System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    	}
    	
    	private synchronized void dec(){
    		j--;
    		System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    	}
    	
    	class Inc implements Runnable{
    		@Override
    		public void run(){
    			for(int i=0;i<5;i++){
    				inc();
    			}
    		}
    	}
    	class Dec implements Runnable{
    		@Override
    		public void run(){
    			for(int i=0;i<5;i++){
    				dec();
    			}			
    		}
    	}
    	public static void main(String[] args){
    		ManyThreads threads = new ManyThreads();
    		Inc inc = threads.new Inc();
    		Dec dec = threads.new Dec();
    		for(int i=0;i<2;i++){
    			Thread t = new Thread(inc);
    			t.start();
    			t = new Thread(dec);
    			t.start();
    		}
    	}
    }
    
    第二种方式:具体加减操作写在一个类的方法里,没有内部类,用另外一个类去调用。

    package com.jn.test;
    
    public class ManyThreads2 {
    	private int j;
    	
    	public  synchronized void inc(){
    		j++;
    		System.out.println(Thread.currentThread().getName()+"-inc:"+j);
    	}
    	
    	public synchronized void dec(){
    		j--;
    		System.out.println(Thread.currentThread().getName()+"-dec:"+j);
    	}
    }
    
    调用类:
    package com.jn.test;
    
    public  class ThreadTest {
    	 private ManyThreads2 many = new ManyThreads2();
    
    	  public void test() {
    	        for (int i = 0; i < 2; i++) {
    	            new Thread(new Runnable() {
    
    	                @Override
    	                public void run() {
    	                    // TODO Auto-generated method stub
    	                    for (int i = 0; i < 5; i++) {
    	                        many.inc();
    	                    }
    	                }
    	            }).start();
    	            new Thread(new Runnable() {
    
    	                @Override
    	                public void run() {
    	                    // TODO Auto-generated method stub
    	                    for (int i = 0; i < 5; i++) {
    	                        many.dec();
    	                    }
    	                }
    	            }).start();
    	        }
    	    }
    	 
    	    public static void main(String[] args) {
    	        // TODO Auto-generated method stub
    	    	ThreadTest tTest = new ThreadTest();
    	        tTest.test();
    	    }	  
    }
    



  • 相关阅读:
    算法的力量
    图文细说11种计算机图标符号的历史
    位图像素的颜色
    位图像素的颜色
    大数处理之三(除法)
    大数处理之三(除法)
    大数处理之二(幂运算)
    大数处理之二(幂运算)
    浮点数(double)的优势
    大数处理之一(加法和乘法)
  • 原文地址:https://www.cnblogs.com/mlan/p/11060379.html
Copyright © 2020-2023  润新知