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,程序如下。的更多相关文章

  1. 创建4个线程,两个对j加一,两个对j减一(j两同两内)

    package multithread; public class MyThread { //j变量私有 private int j; //同步的+1方法 private synchronized v ...

  2. Java 图形化界面设计(GUI)实战练习(代码)

    关于Java图形化界面设计,基础知识网上可搜,下面简单介绍一下重点概念,然后就由浅入深代码实例. 程序是为了方便用户使用的,Java引入图形化界面编程. 1.JFrame 是容器类 2.AWT 是抽象 ...

  3. 【Java面试题】29 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

    本题并不难,实现方式有很多种,有很多种结构. 方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程. 代码: public class ManyThreads { ...

  4. 【转载】 Java线程面试题 Top 50

    Java线程面试题 Top 50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的J ...

  5. Java线程面试题 Top 50 (转载)

    转载自:http://www.cnblogs.com/dolphin0520/p/3958019.html 原文链接:http://www.importnew.com/12773.html   本文由 ...

  6. 50 道 Java 线程面试题(转载自牛客网)

    下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理 ...

  7. Java线程面试题 Top 50

    转自:http://www.importnew.com/12773.html 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java ...

  8. 【多线程】Java线程面试题 Top 50(转载)

    Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html   本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎 ...

  9. Java线程面试题 Top 50(转载)

    原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的 ...

随机推荐

  1. springMVC初探视图解析器——ResourceBundleViewResolver

    视图解析器ResourceBundleViewResolver是根据proterties文件来找对应的视图来解析”逻辑视图“的, 该properties文件默认是放在classpath路径下的view ...

  2. Using ASIHTTPRequest in an iOS project

    1) Add the files Copy the files you need to your project folder, and add them to your Xcode project. ...

  3. [置顶] kubernetes资源类型--RC和RS

    Replication Controller(RC) RC是K8S中的另一个核心概念,应用托管在K8S后,K8S需要保证应用能够持续运行,这是RC的工作内容. 主要功能 确保pod数量:RC用来管理正 ...

  4. go+mysql实现页面的增删改查练习

    原文地址:http://www.niu12.com/article/35 初次学go,在了解一些基础之后就开始做一个用户的增删改查来回顾知识,有很多数据验证和安全漏洞并没有考虑,只当作联系 前提:下载 ...

  5. Linux用ps命令查找进程PID再用kill命令终止进程的方法

    使用linux操作系统,难免遇到一些软件"卡壳"的问题,这时就需要使用linux下强大的kill命令来结束相关进程.这在linux系统下是极其容易的事情,你只需要kill xxx即 ...

  6. EasyUI Tree 动态传递参数

    1.问题背景 一般出现在加载的时候,传递参数给后台,进行数据筛选,然后在加载tree渲染数据.所谓动态参数,可以是你的上一级节点node,或者是根节点node. 2.涉及方法 onBeforeLoad ...

  7. hive on spark VS SparkSQL VS hive on tez

    http://blog.csdn.net/wtq1993/article/details/52435563 http://blog.csdn.net/yeruby/article/details/51 ...

  8. 2017.9.15 mybatis批量插入后实现主键回填

    参考来自:mybatis mysql 批量insert 返回主键 注意:必须要在mybatis3.3.1及其以上才能实现. 1.service List branchEntryList = (Arra ...

  9. 【原创】关于bug反正出现的问题可能

    bug修正的问题:1. xib问题.2. 模块不清同时修改.3. svn代码合并的修改熟悉程度.4. 禁止全局格式化代码.

  10. Angular 学习笔记——标签指令

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...