问一道线程同步面试题

Gemini_ant 2014-10-19 05:12:17
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
public class ThreadTest1{
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();
}
}
}
}


初学JAVA ,对上面这道面试题有些不理解

⑴处 Thread t=new Thread(inc); 这个线程直接用 函数inc做参数是什么意思?
⑵处 for(int i=0;i<100;i++) 这个循环的目的是什么?
...全文
232 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lliiqiang 2014-10-21
  • 打赏
  • 举报
回复
(1)创建线程的另外一种方式 (2)调用100次方法.
Paul_ZJ 2014-10-20
  • 打赏
  • 举报
回复
⑴处 Thread t=new Thread(inc); 这个线程直接用 函数inc做参数是什么意思? Thread构造函数定义: public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); } class Inc implements Runnable Inc实现了Runnable接口,此处作为target,告知新产生的Thread到底执行哪个target的run函数 ⑵处 for(int i=0;i<100;i++) 这个循环的目的是什么? 这里循环一百次的目的是为了控制每个线程执行的时间。 如果改为 for(int i=0;i<10;i++)(方便展示),输出结果: 第一次: 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-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 Thread-1-dec:-1 Thread-1-dec:-2 Thread-1-dec:-3 Thread-1-dec:-4 Thread-1-dec:-5 Thread-1-dec:-6 Thread-1-dec:-7 Thread-1-dec:-8 Thread-1-dec:-9 Thread-1-dec:-10 Thread-2-inc:-9 Thread-2-inc:-8 Thread-2-inc:-7 Thread-2-inc:-6 Thread-2-inc:-5 Thread-2-inc:-4 Thread-2-inc:-3 Thread-2-inc:-2 Thread-2-inc:-1 Thread-2-inc:0(两次增的过程,两次减的过程) 第二次: Thread-0-inc:1 Thread-0-inc:2 Thread-0-inc:3 Thread-1-dec:2 Thread-3-dec:1 Thread-3-dec:0 Thread-3-dec:-1 Thread-3-dec:-2 Thread-3-dec:-3 Thread-3-dec:-4 Thread-3-dec:-5 Thread-3-dec:-6 Thread-3-dec:-7 Thread-3-dec:-8 Thread-0-inc:-7 Thread-0-inc:-6 Thread-0-inc:-5 Thread-0-inc:-4 Thread-0-inc:-3 Thread-0-inc:-2 Thread-0-inc:-1 Thread-1-dec:-2 Thread-1-dec:-3 Thread-1-dec:-4 Thread-1-dec:-5 Thread-1-dec:-6 Thread-1-dec:-7 Thread-1-dec:-8 Thread-1-dec:-9 Thread-1-dec:-10 Thread-2-inc:-9 Thread-2-inc:-8 Thread-2-inc:-7 Thread-2-inc:-6 Thread-2-inc:-5 Thread-2-inc:-4 Thread-2-inc:-3 Thread-2-inc:-2 Thread-2-inc:-1 Thread-2-inc:0(三次增,两次减) 所以这个地方加循环主要是为了增加线程循环体的时间,从而可以体现出不同线程对共同资源的操作的特点

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧