Java线程面试题:设计四个线程,其中两个线程每次对 j 加 1,另外两个每次对 j 减 1,程序如下。
package thread;
/**
* Java线程面试题
* @author zhongfg
* @date 2015-06-16
*/
public class ThreadInterview2 {
// 定义全局变量
private int j; public static void main(String args[]) { ThreadInterview2 tt = new ThreadInterview2();
// 调用非静态的方法
Inc inc = tt.new Inc();
Dec dec = tt.new Dec(); for (int i = 0; i < 2; i++) {
Thread t = new Thread(inc);
t.start();
t = new Thread(dec);
t.start();
}
} class Inc implements Runnable {
public void run() {
for (int i = 0; i < 50; i++) {
inc();
}
}
} class Dec implements Runnable {
public void run() {
for (int i = 0; i < 50; i++) {
dec();
}
}
} private synchronized void inc() {
j++;
System.out.println(Thread.currentThread().getName() + "->增加后的值:" + j);
} private synchronized void dec() {
j--;
System.out.println(Thread.currentThread().getName() + "->减后的值:" + j);
}
} 运行结果:
Thread-0->增加后的值:1
Thread-0->增加后的值:2
Thread-0->增加后的值:3
Thread-0->增加后的值:4
Thread-0->增加后的值:5
Thread-0->增加后的值:6
Thread-0->增加后的值:7
Thread-0->增加后的值:8
Thread-0->增加后的值:9
Thread-0->增加后的值:10
Thread-0->增加后的值:11
Thread-0->增加后的值:12
Thread-0->增加后的值:13
Thread-0->增加后的值:14
Thread-0->增加后的值:15
Thread-0->增加后的值:16
Thread-0->增加后的值:17
Thread-0->增加后的值:18
Thread-0->增加后的值:19
Thread-0->增加后的值:20
Thread-0->增加后的值:21
Thread-0->增加后的值:22
Thread-0->增加后的值:23
Thread-0->增加后的值:24
Thread-0->增加后的值:25
Thread-0->增加后的值:26
Thread-0->增加后的值:27
Thread-0->增加后的值:28
Thread-0->增加后的值:29
Thread-0->增加后的值:30
Thread-0->增加后的值:31
Thread-0->增加后的值:32
Thread-0->增加后的值:33
Thread-0->增加后的值:34
Thread-0->增加后的值:35
Thread-0->增加后的值:36
Thread-0->增加后的值:37
Thread-0->增加后的值:38
Thread-0->增加后的值:39
Thread-0->增加后的值:40
Thread-0->增加后的值:41
Thread-0->增加后的值:42
Thread-0->增加后的值:43
Thread-0->增加后的值:44
Thread-0->增加后的值:45
Thread-0->增加后的值:46
Thread-0->增加后的值:47
Thread-0->增加后的值:48
Thread-0->增加后的值:49
Thread-0->增加后的值:50
Thread-1->减后的值:49
Thread-1->减后的值:48
Thread-1->减后的值:47
Thread-1->减后的值:46
Thread-1->减后的值:45
Thread-1->减后的值:44
Thread-1->减后的值:43
Thread-1->减后的值:42
Thread-1->减后的值:41
Thread-1->减后的值:40
Thread-1->减后的值:39
Thread-1->减后的值:38
Thread-1->减后的值:37
Thread-1->减后的值:36
Thread-1->减后的值:35
Thread-1->减后的值:34
Thread-1->减后的值:33
Thread-1->减后的值:32
Thread-1->减后的值:31
Thread-1->减后的值:30
Thread-1->减后的值:29
Thread-1->减后的值:28
Thread-1->减后的值:27
Thread-1->减后的值:26
Thread-1->减后的值:25
Thread-1->减后的值:24
Thread-1->减后的值:23
Thread-1->减后的值:22
Thread-1->减后的值:21
Thread-1->减后的值:20
Thread-1->减后的值:19
Thread-1->减后的值:18
Thread-1->减后的值:17
Thread-1->减后的值:16
Thread-1->减后的值:15
Thread-1->减后的值:14
Thread-1->减后的值:13
Thread-1->减后的值:12
Thread-1->减后的值:11
Thread-1->减后的值:10
Thread-1->减后的值:9
Thread-1->减后的值:8
Thread-1->减后的值:7
Thread-1->减后的值:6
Thread-1->减后的值:5
Thread-1->减后的值:4
Thread-1->减后的值:3
Thread-1->减后的值:2
Thread-1->减后的值:1
Thread-1->减后的值:0
Thread-3->减后的值:-1
Thread-3->减后的值:-2
Thread-3->减后的值:-3
Thread-3->减后的值:-4
Thread-3->减后的值:-5
Thread-3->减后的值:-6
Thread-3->减后的值:-7
Thread-3->减后的值:-8
Thread-3->减后的值:-9
Thread-3->减后的值:-10
Thread-3->减后的值:-11
Thread-3->减后的值:-12
Thread-3->减后的值:-13
Thread-3->减后的值:-14
Thread-3->减后的值:-15
Thread-3->减后的值:-16
Thread-3->减后的值:-17
Thread-3->减后的值:-18
Thread-3->减后的值:-19
Thread-3->减后的值:-20
Thread-3->减后的值:-21
Thread-3->减后的值:-22
Thread-3->减后的值:-23
Thread-3->减后的值:-24
Thread-3->减后的值:-25
Thread-3->减后的值:-26
Thread-3->减后的值:-27
Thread-3->减后的值:-28
Thread-3->减后的值:-29
Thread-3->减后的值:-30
Thread-3->减后的值:-31
Thread-3->减后的值:-32
Thread-3->减后的值:-33
Thread-3->减后的值:-34
Thread-3->减后的值:-35
Thread-3->减后的值:-36
Thread-3->减后的值:-37
Thread-3->减后的值:-38
Thread-3->减后的值:-39
Thread-3->减后的值:-40
Thread-3->减后的值:-41
Thread-3->减后的值:-42
Thread-3->减后的值:-43
Thread-3->减后的值:-44
Thread-3->减后的值:-45
Thread-3->减后的值:-46
Thread-3->减后的值:-47
Thread-3->减后的值:-48
Thread-3->减后的值:-49
Thread-3->减后的值:-50
Thread-2->增加后的值:-49
Thread-2->增加后的值:-48
Thread-2->增加后的值:-47
Thread-2->增加后的值:-46
Thread-2->增加后的值:-45
Thread-2->增加后的值:-44
Thread-2->增加后的值:-43
Thread-2->增加后的值:-42
Thread-2->增加后的值:-41
Thread-2->增加后的值:-40
Thread-2->增加后的值:-39
Thread-2->增加后的值:-38
Thread-2->增加后的值:-37
Thread-2->增加后的值:-36
Thread-2->增加后的值:-35
Thread-2->增加后的值:-34
Thread-2->增加后的值:-33
Thread-2->增加后的值:-32
Thread-2->增加后的值:-31
Thread-2->增加后的值:-30
Thread-2->增加后的值:-29
Thread-2->增加后的值:-28
Thread-2->增加后的值:-27
Thread-2->增加后的值:-26
Thread-2->增加后的值:-25
Thread-2->增加后的值:-24
Thread-2->增加后的值:-23
Thread-2->增加后的值:-22
Thread-2->增加后的值:-21
Thread-2->增加后的值:-20
Thread-2->增加后的值:-19
Thread-2->增加后的值:-18
Thread-2->增加后的值:-17
Thread-2->增加后的值:-16
Thread-2->增加后的值:-15
Thread-2->增加后的值:-14
Thread-2->增加后的值:-13
Thread-2->增加后的值:-12
Thread-2->增加后的值:-11
Thread-2->增加后的值:-10
Thread-2->增加后的值:-9
Thread-2->增加后的值:-8
Thread-2->增加后的值:-7
Thread-2->增加后的值:-6
Thread-2->增加后的值:-5
Thread-2->增加后的值:-4
Thread-2->增加后的值:-3
Thread-2->增加后的值:-2
Thread-2->增加后的值:-1
Thread-2->增加后的值:0
Java线程面试题:设计四个线程,其中两个线程每次对 j 加 1,另外两个每次对 j 减 1,程序如下。的更多相关文章
- 创建4个线程,两个对j加一,两个对j减一(j两同两内)
package multithread; public class MyThread { //j变量私有 private int j; //同步的+1方法 private synchronized v ...
- Java 图形化界面设计(GUI)实战练习(代码)
关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例. 程序是为了方便用户使用的,Java引入图形化界面编程. 1.JFrame 是容器类 2.AWT 是抽象 ...
- 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
本题并不难,实现方式有很多种,有很多种结构. 方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程. 代码: public class ManyThreads { ...
- 【转载】 Java线程面试题 Top 50
Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...
- Java线程面试题 Top 50 (转载)
转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html 本文由 ...
- 50 道 Java 线程面试题(转载自牛客网)
下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...
- Java线程面试题 Top 50
转自:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java ...
- 【多线程】Java线程面试题 Top 50(转载)
Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎 ...
- Java线程面试题 Top 50(转载)
原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的 ...
随机推荐
- Ubuntu16.04 -- 后台进程Nohup
nohup用于使程序在用户退出登陆.关闭终端之后仍能继续运行 用法: nohup your_command & #(符号&使程序在后台运行) exit #(退出nohup模式) 启动后 ...
- docker之人手一台服务器
安装docker uname –r 检查内核版本 yum update 升级本地yum包 vim /etc/yum.repos.d/docker.repo #添加yum仓库配置 [dockerrepo ...
- nginx的301与302如何配置
转自:http://blog.sina.com.cn/s/blog_5d73ba76010145rr.html 首先看一个完整代码示例,关于nginx 301 302跳转的. 301跳转设置: ser ...
- 2017年开发者生态报告:Python最多人想尝试的编程语言(转载)
在过去的十年里,Python 语言获得了最大的增长幅度,已经成为最受欢迎的程序设计语言之一.JetBrains 近日发布了 2017 开发者生态报告,该报告包含开发人员对 11 种编程语言以及数据库和 ...
- 初识Nginx及编译安装Nginx
初识Nginx及编译安装Nginx 环境说明: 系统版本 CentOS 6.9 x86_64 软件版本 nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...
- 【C#】.NET提供了哪些类型来实现反射
实现反射的类型大多数都定义在System.Reflection命名空间之下. Assembly 定义一个Assembly,它是可重用.无版本冲突并且可自我描述的公共语言运行库应用程序构造块. Asse ...
- git merge 和 git rebase 小结(转)
git merge是用来合并两个分支的. git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 ---------------------- ...
- 实现Tab功能
网上实现Tab功能的方法有很多,这里我使用Fragment的方法,我觉着比较简单易懂 MainActivity private android.app.FragmentManager fragment ...
- Java后台代码调用Spring的@Service Bean的方式
比如:在我的project中有一个类CompassIndexOperation,以: @Service("CompassIndexOperation") @Transactiona ...
- background API
语法: background:bg-color bg-image position/bg-size bg-repeat bg-origin bg-clip bg-attachment initial| ...