作者: stonelv0101 时间: 2014-11-20 15:13
这是一个Java面试题吧,附上代码,lz喜欢的话,给点币,谢谢
/**
* 设计 4 个 ( 可以是 n 个 ) 线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1
*/
package com.jiaocaigen.test;
public class Test {
// 采用 Runnable 接口方式创建的多条线程可以共享实例属性
private int i ;
// 同步增加方法
private synchronized void inc(){
i ++;
System. out .println(Thread.currentThread().getName()+ "--inc--" + i );
}
// 同步减算方法
private synchronized void dec(){
i --;
System. out .println(Thread.currentThread().getName()+ "--dec--" + i );
}
//增加线程
class Inc implements Runnable {
public void run() {
inc();
}
}
// 减算线程
class Dec implements Runnable{
public void run() {
dec();
}
}
public static void main(String[] args) {
Test t = new Test();
// 内部类的实例化
Inc inc = t. new Inc();
Dec dec = t. new Dec();
// 创建 2*n 个线程 此处 n=2
for ( int i = 0; i < 2; i++) {
new Thread(inc).start();
new Thread(dec).start();
}
}
}
注:这里inc方法和dec方法加synchronized关键字是因为当两个线程同时操作同一个变量时,就算是简单的j++操作时,在系统底层也是通过多条机器语句来实现,所以在执行j++过程也是要耗费时间,这时就有可能在执行j++的时候,另外一个线程H就会对j进行操作,因此另外一个线程H可能操作的可能就不是最新的值了。因此要提供线程同步。作者: 逗比程序员 时间: 2014-11-20 15:44