笔试四个线程问题

ahujyy 2008-03-19 09:09:19
写四个线程,其中两个每次把i加1,另外两个把i减1,我新手写的是每个线程都有自己的i值,怎么写共同的i值呢.
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dragon_sxw 2008-03-20
  • 打赏
  • 举报
回复
网上有现成的例子, 搜java面试题
ahujyy 2008-03-20
  • 打赏
  • 举报
回复
谢谢各位了,应届毕业生正在找工作中。。。。。
bootupnow 2008-03-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Squall1009 的回复:]
上面的回复是 to 2楼的-_-#
[/Quote]
难道我被大大无情的BS了?
Squall1009 2008-03-19
  • 打赏
  • 举报
回复
上面的回复是 to 2楼的-_-#
Squall1009 2008-03-19
  • 打赏
  • 举报
回复
-_-!
dracularking 2008-03-19
  • 打赏
  • 举报
回复
你可以用static 也可以用同一个Runnable target,
它的成员变量也是唯一
bootupnow 2008-03-19
  • 打赏
  • 举报
回复
up 1楼的大大,学习。


public class ThreadTest implements Runnable{
static int i = 100;
static boolean addFlag = true; // 加i,减i?

public ThreadTest(int maxThread) throws Exception{
Thread[] t = new Thread[maxThread];
for(int j=0;j<t.length;j++){
if(j % 2 == 0){ // 下标如果是2的倍数,就加 i + 1
setAddFlag(true);
t[j] = new Thread(this);
t[j].start();
t[j].join();
}
else{ // i - 1
setAddFlag(false);
t[j] = new Thread(this);
t[j].start();
t[j].join();
}
}
}

public synchronized void setAddFlag(boolean b){
addFlag = b;
}

public void run(){
if(addFlag){
i++;
System.out.println("i = " + i + "\t" + ((addFlag)?"加i":"减i"));
}
else{
i--;
System.out.println("i = " + i + "\t" + ((addFlag)?"加i":"减i"));
}
}

public static void main(String[] args) throws Exception{
new ThreadTest(10); // 设置启动线程数
}
}
Squall1009 2008-03-19
  • 打赏
  • 举报
回复
package test;

class SimpleThread implements Runnable {
public SimpleThread(TestThread obj, String op) {
this.obj = obj;
this.op = op;
}

public void run() {
synchronized (obj) {
if ("+".equals(op)) {
++obj.i;
}
if ("-".equals(op)) {
--obj.i;
}
}
}

private TestThread obj;

private String op;
}

public class TestThread {
public static void main(String[] args) throws InterruptedException {
TestThread obj = new TestThread();
Thread t1 = new Thread(new SimpleThread(obj, "+"));
Thread t2 = new Thread(new SimpleThread(obj, "-"));
Thread t3 = new Thread(new SimpleThread(obj, "-"));
Thread t4 = new Thread(new SimpleThread(obj, "+"));
t1.start();
t2.start();
t3.start();
t4.start();
t1.join();
t2.join();
t3.join();
t4.join();
System.out.println("i is " + obj.i);
}

public int i = 0;
}

62,623

社区成员

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

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