`
spring5365
  • 浏览: 71445 次
  • 性别: Icon_minigender_1
  • 来自: 钓鱼岛
社区版块
存档分类
最新评论

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

阅读更多
public class ThreadIncDec {

	private int j;

	public static void main(String[] args) {
		ThreadIncDec incDec = new ThreadIncDec();
		Inc inc = incDec.new Inc();
		Dec dec = incDec.new Dec();
		for (int i = 0; i < 2; i++) {
			Thread t = new Thread(inc);
			t.start();
			t = new Thread(dec);
			t.start();
		}
	}
	
	//计数加一
	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 {
		public void run() {
			for (int i = 0; i < 100; i++) {
				inc();
			}
		}
	}

	//内部类实现的线程,线程对计数器减一
	class Dec implements Runnable {
		public void run() {
			for (int i = 0; i < 100; i++) {
				dec();
			}
		}
	}
}

分享到:
评论
15 楼 wangpeihu 2010-12-03  
我面试的时候也遇到过这个题目,一个字都没变哦。
14 楼 wenxiang_tune 2010-12-02  
很搞笑,我面试也有这道题,
13 楼 spring5365 2010-12-02  
sam_kee 写道
thinking in java 还没看完,强势关注

呵呵,努力学习,那本书确实很有用的,我只看了第二版,当年是改行,完全自学啊,好多东西当时都不理解
12 楼 sam_kee 2010-12-02  
thinking in java 还没看完,强势关注
11 楼 月落码农 2010-12-02  
spring5365 写道
月落码农 写道
spring5365 写道
bbflys 写道
似乎是Thinking in Java里的一个例子。。。

这个是我去一家公司的笔试题,好长时间没看过Think in java了


如果没错,应该是华为吧!我记得我去的时候,他的题目一摸一样。

看来很多公司都是从网上弄的题啊,这个是杭州恒生电子的


原来如此哇!呵呵
10 楼 spring5365 2010-12-02  
月落码农 写道
spring5365 写道
bbflys 写道
似乎是Thinking in Java里的一个例子。。。

这个是我去一家公司的笔试题,好长时间没看过Think in java了


如果没错,应该是华为吧!我记得我去的时候,他的题目一摸一样。

看来很多公司都是从网上弄的题啊,这个是杭州恒生电子的
9 楼 月落码农 2010-12-02  
spring5365 写道
bbflys 写道
似乎是Thinking in Java里的一个例子。。。

这个是我去一家公司的笔试题,好长时间没看过Think in java了


如果没错,应该是华为吧!我记得我去的时候,他的题目一摸一样。
8 楼 spring5365 2010-12-02  
bbflys 写道
似乎是Thinking in Java里的一个例子。。。

这个是我去一家公司的笔试题,好长时间没看过Think in java了
7 楼 bbflys 2010-12-02  
似乎是Thinking in Java里的一个例子。。。
6 楼 onlylau 2010-12-02  
coreymylife 写道
atomInteger

正解且是最好最简便方法!!!
5 楼 spring5365 2010-12-02  
i2534 写道
coreymylife 写道
atomInteger

正解.不用你同步,api帮你搞定.

这个还真没用过,谢谢,马上研究一下
4 楼 i2534 2010-12-02  
coreymylife 写道
atomInteger

正解.不用你同步,api帮你搞定.
3 楼 coreymylife 2010-12-02  
atomInteger
2 楼 spring5365 2010-12-02  
IcyFenix 写道
靠同步去加减,应该算是最基本也是最慢的方法了吧。

实际使用的时候考虑一下concurrent包的那堆原子数吧

是的,最近正在研究,所以只发了最简单的,谢谢
1 楼 IcyFenix 2010-12-02  
靠同步去加减,应该算是最基本也是最慢的方法了吧。

实际使用的时候考虑一下concurrent包的那堆原子数吧

相关推荐

    设计4个线程,其中两个对j增加,两个对j减少

    本示例中,我们创建了4个线程,其中两个线程负责递增变量`j`,另外两个线程负责递减`j`。这个设计主要展示了线程同步和竞争条件的概念。 首先,我们需要理解`Thread`类在Java中的作用。`Thread`是Java的内置类,...

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

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

    启动两个线程,一个线程打印1~52,另一个线程打印A~Z

    启动两个线程,一个线程打印1~52,另一个线程打印A~Z

    C# 多线程互斥 两个线程交替工作

    对于两个线程交替工作,一个常见的应用场景是控制两个线程按照一定的顺序执行,比如线程A执行一次,然后线程B执行一次,如此循环。以下是一种可能的实现方法: 1. 使用`ManualResetEvent`或`AutoResetEvent`对象...

    编写程序,使用两个线程,一个队列,其中一个线程从键盘读取数据,放入到队列中,直到读取的数据是字符串quit则结束

    1. 编写程序,使用两个线程,一个队列, 其中一个线程从键盘读取数据,放入到队列中,直到读取的数据是字符串quit则结束,线程的任务就是循环读取数据直到特定的字符串quit。另外一个线程,不断的从队列中读取数据...

    两个串口多线程通信

    1. **初始化线程**:创建两个线程,每个线程负责一个串口的读写。可以使用各种编程语言提供的线程库,例如Java的`Thread`类,Python的`threading`模块,或者C++的`std::thread`。 2. **串口配置**:在每个线程启动...

    java程序 两个线程实现学生成绩的读写

    为了启动这两个线程,我们会在主程序中创建它们的实例,然后调用`start()`方法。线程的执行顺序取决于JVM的调度策略,因此可能读线程先执行,也可能写线程先执行。为了避免混乱,可能需要设定一些同步规则,比如使用...

    Java实现的两个线程同时运行案例

    Java多线程编程实现两个线程同时运行案例 Java多线程编程是Java编程中的一种重要技术,用于实现多任务并发执行,提高程序的执行效率和响应速度。在本文中,我们将介绍如何使用Java实现两个线程同时运行的案例,涉及...

    在Windows XP下,建立一个包含两个线程,它们分别显示。

    4. **同步机制**:由于两个线程可能会同时操作相同的资源(如UI元素),我们需要使用同步机制来避免竞态条件。Windows API提供了多种同步对象,如事件(Event)、互斥量(Mutex)或临界区(CriticalSection)。在...

    实现一个数据单元,包括学号和姓名两部分。编写两个线程,一个线程往数据单元中写,另一个线程往出读。要求每写一次就往出读一次。

    本实验的任务是设计并实现一个数据单元,该单元包含学号和姓名两个字段,并且使用两个线程,一个用于写入数据,另一个用于读取数据。这种设计模式被称为“生产者-消费者”问题,是多线程编程中的经典案例。 首先,...

    linux中一个程序的两个线程的同步(c语言实现)

    Linux 中两个线程的同步(C 语言实现) 在 Linux 操作系统中,多线程编程是非常常见的,但是当多个线程共享同一个资源时,需要确保线程安全,以免出现数据不一致或其他错误。信号灯(Semaphore)是解决这种问题的一...

    java用线程两种方式

    在这个main方法中,程序通过两种方式创建了两个线程:一个打印1到1000之间的所有奇数,另一个打印所有偶数。通过使用while循环,程序会持续运行直到两个线程都完成了它们的任务。 总结来说,Java通过两种方式提供了...

    两个线程交替执行

    在上述代码中,我们可以看到两个线程 a 和 b,它们之间通过一个锁对象 LOCK 进行同步。线程 a 负责打印数字 1、2、3,而线程 b 负责打印数字 4、5、6。通过使用 synchronized 关键字,我们可以确保在某个时刻只有一...

    多线程之间的线程通信

    1. **信号量(Semaphore)**:用于控制对共享资源的访问,当资源可用时,信号量值会减一,当资源不足时,线程会被阻塞,直到信号量值增加到允许访问为止。 2. **锁(Lock)**:包括互斥锁(Mutex)和读写锁(RW-Lock)。...

    javaSocket的Tcp通信方式两个线程,一个线程接收数据一个线程发送数据

    总的来说,Java Socket的TCP通信采用两个线程分别处理接收和发送数据,可以提高系统的并发性能,减少阻塞,提高响应速度,同时通过合理的同步机制确保数据的准确传递。这是一个在并发编程中常见的优化策略,对于理解...

    java 两个线程相互顺序输出

    标题“java 两个线程相互顺序输出”涉及的问题是如何在多线程环境下控制线程的执行顺序,使得两个线程可以按照特定的顺序交替打印输出。这通常涉及到线程同步和通信的概念。下面将详细解释这些知识点。 1. **线程...

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

    该类中有两个成员变量:total 和 count,分别表示剩余的火车票数和已经售出的火车票数。在 run 方法中,我们使用 while 循环来模拟售票过程。在每次循环中,我们都会检查是否还有剩余的火车票,如果有,则将其售出,...

    多线程实现多控制两个案例

    首先,我们来看第一个案例:实现两个线程分别控制两个运动。在计算机编程中,线程可以被视为程序的执行流,每个线程都有自己的堆栈和局部变量,但共享同一块内存空间。在这个案例中,我们可能会创建两个线程,每个...

    iOS-常驻线程之线程循环调用(两个线程循环交替调用)

    本话题主要探讨如何实现两个线程循环交替调用的机制,这通常是为了平衡负载或者实现特定的并发模式。例如,一个线程负责下载数据,另一个线程负责处理数据,两者交替工作,确保系统的高效运行。 首先,我们需要了解...

    Java实现消费者与生产者两个线程问题

    用Java实现消费者与生产者两个线程进行调度

Global site tag (gtag.js) - Google Analytics