当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1

发表于: 2012-03-18   作者:bylijinnan   来源:转载   浏览:
摘要: public class IncDecThread { private int j=10; /* * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1 * 两个问题: * 1、线程同步--synchronized * 2、线程之间如何共享同一个j变量--内部类 */ public static

public class IncDecThread {

	private int j=10;
	
	/*
	 * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
	 * 两个问题:
	 * 1、线程同步--synchronized
	 * 2、线程之间如何共享同一个j变量--内部类
	 */
	public static void main(String[] args) {
		IncDecThread incDec=new IncDecThread();
		Inc inc=incDec.new Inc();
		Dec dec=incDec.new Dec();
		for(int i=0;i<2;i++){
			Thread thread=new Thread(inc);
			thread.start();
			thread=new Thread(dec);
			thread.start();
		}
	}

	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);
	}
	
	class Inc implements Runnable{
		public void run(){
			for(int i=0;i<20;i++){
				inc();
			}
		}
	}
	class Dec implements Runnable{
		public void run(){
			for(int i=0;i<20;i++){
				dec();
			}
		}
	}
}





第二种解法 :


package com.ljn.base;

/**
 * @author lijinnan
 * @date:2013-9-12 上午9:55:32  
 */

public class IncDecThread2 {

    /**
     * 测试次数
     */
    public static final int TEST_COUNT = 20;
    
    /*
     * 题目:用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1
     * 两个问题:
     * 1、线程同步--synchronized
     * 2、线程之间如何共享同一个j变量--将j以及对j的操作封装在Data类中,然后作为共享对象传递给IncRunnable和DecRunnable
     * 
     * 相对上面第一种解法(利用内部类),本解法更符合面向对象的思想
     */
    public static void main(String[] args) {
        Data data = new Data();
        
        //加1线程,2个
        new Thread(new IncRunnable(data)).start();
        new Thread(new IncRunnable(data)).start();
        
        //减1线程,2个
        new Thread(new DecRunnable(data)).start();
        new Thread(new DecRunnable(data)).start();
    }

}

class Data {
    
    private int j = 10;
    
    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);
    }
    
}


class IncRunnable implements Runnable {
    
    private Data data;
    
    public IncRunnable (Data data) {
        this.data = data;
    }
    
    @Override
    public void run() {
        for (int i = 0; i < IncDecThread2.TEST_COUNT; i++) {
            data.inc();
        }
    }
    
}


class DecRunnable implements Runnable {
    
    private Data data;
    
    public DecRunnable (Data data) {
        this.data = data;
    }
    
    @Override
    public void run() {
        for (int i = 0; i < IncDecThread2.TEST_COUNT; i++) {
            data.dec();
        }
    }
    
}




多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows)。后来发现实现起来特别麻烦, 就想
陪儿子上围棋课时我希望有一个能在freerunner手机上运行的打谱程序,用来记录儿子和同学的对局。我
陪儿子上围棋课时我希望有一个能在freerunner手机上运行的打谱程序,用来记录儿子和同学的对局。我
陪儿子上围棋课时我希望有一个能在freerunner手机上运行的打谱程序,用来记录儿子和同学的对局。我
转载如何写一个框架:步骤(上) 说明:作者也没写过什么框架,只是分享一些自己的理解,抛砖引玉罢
第一步:主界面和任务栏 首先实现主界面的简单的界面内容,1、指针,2、滚动条隐藏,背景设置 第一
最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的
先显示一下结果: 基本功能: 可以通过左右按钮来切换年月,并同时在其下方显示日期,并且对映相应
许多人对于程序、进程、线程这几个概念许多人都分的不是很清楚,下面我们就简单的介绍一下它们的区
许多人对于程序、进程、线程这几个概念许多人都分的不是很清楚,下面我们就简单的介绍一下它们的区
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号