这是最近面试遇到的一个问题。
用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。
这个问题似乎不是很难,我想说的就是,这个要考察什么吗?为什么是2个加1,2个减1,而不是1个加,一个减1,他们这样出题有什么潜台词吗?
可能我不是很清楚线程的意义吧,大家随便回答的。
用JAVA写一个多线程程序,如写四个线程,二个加1,二个对一个变量减一,输出。
这个问题似乎不是很难,我想说的就是,这个要考察什么吗?为什么是2个加1,2个减1,而不是1个加,一个减1,他们这样出题有什么潜台词吗?
可能我不是很清楚线程的意义吧,大家随便回答的。
是不是两个线程对1个变量加1,而另外两个线程对这个变量减1,
然后输出的结果只能是 0或1,不能有其他的值?
我觉得几个好像没有什么玄机吧,
主要是考察多线程的同步控制,
写几个同步块或者同步方法,然后用wait,notify做一些同步的控制。
“二个加1,二个对一个变量减一,”这句话的意思应该就是让你测试这种可能性,让你通过线程同步来解决这种问题。
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
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();
}
}
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();
}
}
}
}