这个题太常见了,但是要自己独立的默写出来也不是很容易的哦!
代码:
package renrenPratice;
public class testSomeThread {
/**
* @param args
*/
int j = 10;
public static void main(String[] args) {
// TODO Auto-generated method stub
testSomeThread tt = new testSomeThread();
addJ myaddj = tt.new addJ();
minusJ myminusj = tt.new minusJ();
for (int m = 0; m < 2; m++) {
Thread t = new Thread(myaddj);
t.start();
t = new Thread(myminusj);
t.start();
}
}
private synchronized void addj() {
// TODO Auto-generated method stub
for (int k = 0; k < 10; k++) {
++j;
System.out.println("j++ --> now j is " + j);
}
}
private synchronized void minusj() {
// TODO Auto-generated method stub
for (int l = 0; l < 10; l++) {
--j;
System.out.println("j-- --> now j is " + j);
}
}
class addJ implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
addj();
}
}
class minusJ implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
minusj();
}
}
}
运行结果:
j++ --> now j is 11
j++ --> now j is 12
j++ --> now j is 13
j++ --> now j is 14
j++ --> now j is 15
j++ --> now j is 16
j++ --> now j is 17
j++ --> now j is 18
j++ --> now j is 19
j++ --> now j is 20
j-- --> now j is 19
j-- --> now j is 18
j-- --> now j is 17
j-- --> now j is 16
j-- --> now j is 15
j-- --> now j is 14
j-- --> now j is 13
j-- --> now j is 12
j-- --> now j is 11
j-- --> now j is 10
j++ --> now j is 11
j++ --> now j is 12
j++ --> now j is 13
j++ --> now j is 14
j++ --> now j is 15
j++ --> now j is 16
j++ --> now j is 17
j++ --> now j is 18
j++ --> now j is 19
j++ --> now j is 20
j-- --> now j is 19
j-- --> now j is 18
j-- --> now j is 17
j-- --> now j is 16
j-- --> now j is 15
j-- --> now j is 14
j-- --> now j is 13
j-- --> now j is 12
j-- --> now j is 11
j-- --> now j is 10
看看起来很合理。
分享到:
相关推荐
Java 语言提供了多种方式来实现多线程编程,今天我们将讨论其中的两种实现方式,并使用四个线程来演示对变量 J 的加一和减一操作。 实现方式一:通过继承 Thread 类 在 Java 中,我们可以通过继承 Thread 类来创建...
C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等 C#面试题 包括 ADO.net 多线程等
在这里,我们总结了Java常见的面试题,涵盖了Java的基础部分,包括基本语法、类相关的语法、内部类的语法、继承相关的语法、异常的语法、线程的语法、集合的语法、IO的语法、虚拟机方面的语法等。 1. Java基础部分 ...
在本实验中,我们将创建两个线程,一个负责加一,另一个负责输出。两个线程共享同一个变量 a,並使用信号灯实现同步。 首先,我们创建了一个共享缓冲区,并将其初始化为指定的大小。然后,我们创建了一个信号灯集,...
1. 1 - 100, 找出质数 2. 冒泡排序 3. 1~100共一百个自然数,...6. 设计4个线程,其中两个线程每次对j增加1,另外两个线程每次对j减少1 7. 给你List A,已知,如 3,1,4,9,5```````100. 让你求出里面的最大值与最小值。
在C++笔试面试中,网络和多线程是两个经常被提及的重要知识点。本篇文档详细列举了关于网络部分的面试题目,同时也涉及了与多线程相关的TCP/IP协议栈的建立和断开过程。以下为详细的知识点总结: 1. TCP服务创建...
面试的时候碰到的一个问题,实现多线程对一个全局数的自加,另外一个线程当全局数自加1以后立马显示这个数的现值。
本项目涉及的是一个基础的多线程同步问题,标题"j的多线程加减.zip"揭示了我们需要创建四个线程,两个用于递增变量`j`,另两个用于递减`j`。描述中指出,我们需要编写相应的Java程序来实现这个功能。这个简单的任务...
操作系统面试常见题涵盖了操作系统的基本概念、进程管理、线程管理、同步和异步、阻塞和非阻塞等等。 进程和线程 在操作系统中,进程和线程是两个非常重要的概念。进程是系统进行资源分配和调度的一个独立单位,是...
以下是一些基于“java常见面试题合集”的相关知识点: 1. **基础语法**: - 类与对象:理解类的定义、对象的创建与访问权限。 - 继承与多态:掌握单一继承和接口的多实现,以及方法的重写和重载。 - 封装与抽象...
Linux内核的面试题涉及多方面知识,下面将详细介绍涉及的几个主题。 一、进程管理 在Linux系统中,进程是系统进行资源分配和调度的一个独立单位。每个进程都会被分配一个唯一的进程标识符(PID)。进程管理部分的...
1. 多线程编程中,当多个线程访问同一个变量时,如果其中一个线程修改了该变量的值,其他线程必须立即注意到这个变化。例如,一个线程用于更新计数器,而另一个线程负责读取计数器的值。不使用volatile,编译器可能...
常见java面试题,集合,线程,面向对象,垃圾回收等 常见java面试题,集合,线程,面向对象,垃圾回收等 常见java面试题,集合,线程,面向对象,垃圾回收等 常见java面试题,集合,线程,面向对象,垃圾回收等
在Java面试中,编程题是评估候选人技术能力的重要环节。本压缩包文件包含了一系列常见的Java编程题目,旨在帮助学习者巩固基础,提高解决问题的能力。 1. **冒泡排序**:冒泡排序是最基础的排序算法之一,通过不断...
多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域。所以,学好多线程并发编程对Java程序员来来说极其重要的。
在Java编程领域,多线程是面试中不可或缺的一部分,它涉及到程序的并发执行、资源管理以及性能优化等多个关键点。本资料"多线程面试59题(含答案)_"显然是一个针对Java开发者,尤其是准备面试者的绝佳学习资源。这...
这可能涉及到一个常见的面试题——打印交替的数字序列,比如线程A打印奇数,线程B打印偶数,而这两个线程需要协调工作,确保交替进行。 为了实现这样的功能,开发者可能会使用`synchronized`关键字控制共享资源的...
2. **死锁**:两个或多个线程相互等待对方释放资源,导致所有线程都无法继续。预防死锁的关键在于避免循环等待。 3. **资源饥饿**:如果某些线程持续占用资源,其他线程可能无法获取到所需资源,从而导致性能下降。...
程序创建两个线程,第一个线程没有消息队列,主线程尝试给第一个线程发送一个消息,我们可以看到PostThreadMessage()返回FALSE,程序创建的第二个线程有一个消息队列,主线程中的PostThreadMessage()返回TRUE,程序...