今天还是忙碌在找工作的过程中,今天在做一家公司的笔试题的时候,发现了一道编程题,写结果的。感觉蛮有意思的。所以写出来给大家分享一下。
代码是这样的:大家不妨猜猜结果
当然,我想说说我当时的想法。我觉的线程的start方法就是让线程进入就绪队列,等待着CPU资源,然后访问CPU。这个程序,注意i是静态变量,单独存储在一个地方,所以不管是哪个线程,i的值不再重复从1开始。而且run方法里面有一个synchronized同步,所以答案只会是一个线程的从1到10.我猜想结果应该有三种,要不是A,要不是B,要不是C。所以当时答案就写得是这个。结果咧。。。。。。我就呵呵哒了。避免大家看不完,我就直接在上面解密答案咯。答案就是我猜想的!不过还是建议大家看看我下面的东西,相信大家会有收获的。
package com.xaut.code0927;
public class Ticket implements Runnable{
private static Object obj = new Object();
private static int i = 1;
public void run(){
synchronized(obj){
for(;i<=10;i++){
System.out.println("线程"+Thread.currentThread().getName()+",输出 :"+i);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Ticket ticket = new Ticket();
Thread threadA = new Thread(ticket,"A");
Thread threadB = new Thread(ticket,"B");
Thread threadC = new Thread(ticket,"C");
threadA.start();
threadB.start();
threadC.start();
}
}
--------------------------------------------------------------------------------------------------------------------
线程A,输出 :2
线程A,输出 :3
线程A,输出 :4
线程A,输出 :5
线程A,输出 :6
线程A,输出 :7
线程A,输出 :8
线程A,输出 :9
线程A,输出 :10