java多线程问题,主要考察的就是如何创建线程。此题当然是采用实现runnable接口的方式比较方便。值得思考一下的是最后的运行结果~
程序结束的时候j的值是多少呢?
如果每个线程执行的次数都相同,那么结果当然是0了。因为这两对线程两两抵消。最后j就为0了。
代码如下:
package go.derek;
public class ThreadTest {
private int j;
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<10;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<10;i++){
dec();
}
}
}
public static void main(String[] args){
ThreadTest th=new ThreadTest();
//这是创建内部类对象的套路。
Inc inc=th.new Inc();
Dec dec=th.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);t.start();}}}
运行结果如下:
Thread-0 inc 1
Thread-0 inc 2
Thread-0 inc 3
Thread-0 inc 4
Thread-0 inc 5
Thread-0 inc 6
Thread-0 inc 7
Thread-0 inc 8
Thread-0 inc 9
Thread-0 inc 10
Thread-1 dec 9
Thread-1 dec 8
Thread-1 dec 7
Thread-1 dec 6
Thread-1 dec 5
Thread-1 dec 4
Thread-1 dec 3
Thread-1 dec 2
Thread-1 dec 1
Thread-1 dec 0
Thread-2 inc 1
Thread-2 inc 2
Thread-2 inc 3
Thread-2 inc 4
Thread-2 inc 5
Thread-2 inc 6
Thread-2 inc 7
Thread-2 inc 8
Thread-2 inc 9
Thread-2 inc 10
Thread-3 dec 9
Thread-3 dec 8
Thread-3 dec 7
Thread-3 dec 6
Thread-3 dec 5
Thread-3 dec 4
Thread-3 dec 3
Thread-3 dec 2
Thread-3 dec 1
Thread-3 dec 0
当然每次的运行结果是不同的,但最后的结果肯定是0~