`

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

阅读更多

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();
        }
    }
    
}




0
0
分享到:
评论
1 楼 yeahwell 2013-09-11  
13 Inc inc=incDec.new Inc(); 
14 Dec dec=incDec.new Dec();
这两行代码不能通过编译啊

相关推荐

    线程编程 四个线程...

    用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出

    java 多线程 加减变量

    java 多线程 加减变量

    java多线程编程总结

    详细的讲述了多线程的各种用法 Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠...

    Java多线程编程总结

    Java 线程系列博文总结word化,编目如下,欢迎互相学习交流: Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:...

    java多线程_java多线程下变量共享_

    一个简单记录java多线程下变量共享问题,分析多线程内部运行

    JAVA多线程并发操作全局变量

    NULL 博文链接:https://toknowme.iteye.com/blog/2212529

    C#多线程互斥实例 多线程获取同一变量

    C#多线程互斥实例 多线程获取同一变量(不重复)。是一个很好的学习例子

    java多线程笔记

    Java线程:线程栈模型与线程的变量 12 Java线程:线程的调度-休眠 13 Java线程:线程的调度-优先级 16 Java线程:线程的调度-让步 19 Java线程:线程的调度-合并 22 Java线程:线程的调度-终止线程 25 Java线程:...

    使用三种VC的多线程同步方法编写一个多线程的程序

    1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。

    java ThreadLocal多线程专属的变量源码

    java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...

    Java多线程-知识点梳理和总结-超详细-面试知识点.docx

    Thread安全是Java多线程编程中的一种设计理念,用于确保多个线程可以安全地共享数据和资源。Thread安全可以通过使用线程同步机制、线程安全的数据结构和ThreadLocal变量等方式来实现。 CAS操作 CAS(Compare And ...

    Qt 多线程访问同一个变量

    1.Qt下,多线程使用互斥锁安全访问同一全局变量;2.源码中定义了ThreadA和ThreadB,定义变量后,依次调用函数start()来启动重写的run()函数

    多线程线程变量赋值

    此代码采用直接给线程变量赋值不需要参数传递

    java用线程的两种实现方式设计四个线程两次对J加1两次对J减1

    Java 语言提供了多种方式来实现多线程编程,今天我们将讨论其中的两种实现方式,并使用四个线程来演示对变量 J 的加一和减一操作。 实现方式一:通过继承 Thread 类 在 Java 中,我们可以通过继承 Thread 类来创建...

    05.多线程编程基础-使用多线程-成员变量与线程安全.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    java多线程并发

    java多线程并发的在新窗口

    java多线程通信图解

    java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,这时B线程再从主线程获取该变量的值,这样就实现了...

    63-Java多线程知识点总结1

    Java多线程知识点总结主要讲解了Java中多线程编程的基础知识,包括线程的启动、volatile变量、多线程共享数据、wait、notify、notifyAll等。 线程的启动 在Java中,线程的启动可以通过start()方法来实现,start()...

Global site tag (gtag.js) - Google Analytics