`

多线程-用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 ...

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

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提升系统效率。在多线程环境中,变量共享是一个常见的需求,但也是引发问题的关键点。本篇文章将深入探讨Java多线程下变量共享的问题以及解决...

    java 多线程 加减变量

    java 多线程 加减变量

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

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    多线程线程变量赋值

    总的来说,“多线程线程变量赋值”是一个关于如何在多线程环境中管理线程私有数据的问题。通过`ThreadLocal`,我们可以创建和操作线程特有的变量,避免了数据同步的复杂性,但在使用过程中需要注意内存管理和线程...

    Qt 多线程访问同一个变量

    标题"Qt 多线程访问同一个变量"涉及到的是如何在多线程环境下确保对共享资源(此处为一个全局变量)的安全访问。描述中提到了使用互斥锁来解决这个问题,并通过创建两个线程ThreadA和ThreadB来演示这一过程。 首先...

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    操作系统-创建多线程-读者写者

    本文通过对一个简单的多线程程序的分析,介绍了如何在Windows环境中使用`CreateThread`函数创建线程,并简要探讨了生产者-消费者模式和读者写者问题。在实际开发中,还需要深入研究多线程同步机制,以确保程序的稳定...

    JAVA语言程序设计-第十四章 多线程

    在JAVA语言程序设计中,第十四章主要探讨的是多线程这一核心概念。多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程是通过实现Runnable...

    java多线程之赛马程序实验8多线程练习下载进度

    本实验"java多线程之赛马程序实验8多线程练习下载进度"聚焦于如何利用多线程来模拟实际场景中的下载进度显示。在这一过程中,我们将探讨Thread类的`run`和`start`方法,以及如何通过进度条来可视化表示下载过程。 ...

    安全的编写多线程的_Java_应用程序

    ### 安全编写多线程Java应用程序的关键知识点 #### 一、引言 在现代软件开发中,多线程编程已成为提升程序性能和响应性的关键手段之一。Java作为一种广泛使用的编程语言,提供了丰富的多线程支持。然而,多线程...

    Java多线程程序设计

    Java多线程程序设计是Java开发中的重要领域,它允许应用程序同时执行多个任务,从而提高系统资源的利用率和程序的响应速度。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。 一、创建线程...

    多线程设计一个火车售票模拟程序

    通过本实验,我们学会了如何使用 Java 语言设计一个多线程的火车售票模拟程序。我们了解了多线程设计的重要性,并学习了如何使用 synchronized 关键字来实现线程同步。这个程序可以作为一个简单的示例,展示了多线程...

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

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

    java写的红绿灯演示程序多线程

    总结来说,这个“java写的红绿灯演示程序”是一个理想的实践案例,它展示了Java多线程的基本使用,包括线程的创建、同步、通信和控制。通过分析这个程序,我们可以深入理解J2SE中的并发编程,这对于任何Java开发者来...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程-线程的安全问题与线程的同步机制介绍

    当我们使用多个线程访问同一资源(可以是同一个变量、同一个文件、同一条记录等)的时候,若多个线程只有读操作,那么不会发生线程安全问题(因为不会对数据进行修改)。但是如果多个线程中对资源有读和写的操作,就...

    java线程-Java内存模型

    例如,`count += 1`这样的操作实际上包含读、加、写三个步骤,在多线程环境中,如果在这些步骤之间发生线程切换,可能会导致数据不一致。Java提供了synchronized和java.util.concurrent包下的原子类(如...

    java10个线程按照顺序打印1-100

    在Java编程中,多线程同步是一个常见的挑战,特别是在需要线程按照特定顺序执行任务时。本主题聚焦于如何使用Java实现10个线程按照顺序打印数字1到100。这种问题通常通过线程间通信和同步机制来解决,如`...

Global site tag (gtag.js) - Google Analytics