java多线程问题。两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。

publicclassThreadTest1extendsThread{privatestaticintnum=0,n=100;staticThreadTest1t1,t... public class ThreadTest1 extends Thread {
private static int num=0,n=100;
static ThreadTest1 t1,t2;
int i=0;
static int x;
static String ss=new String();

public ThreadTest1()
{
start();

}
public void run() {

for(x=0;x<200;x++)
{
synchronized(ss)
{
此处添加代码

}
}
}

public synchronized void Print()
{
if(i==0)
{
i++;
System.out.println(this.getName()+":"+ ++num);
}
else
{
i=(i+1)%2;
System.out.println(this.getName()+":"+ ++n);

}

}

public static void main(String[] args) throws InterruptedException {
t1=new ThreadTest1();
t2=new ThreadTest1();
}

}
我的想法是在for循环里面每个线程交替调用Print(),但写出来老是不行。求高手。。
展开
 我来答
匿名用户
2011-09-15
展开全部
你这样写两个线程实例t1和t2间没有交互通信,各跑各的,当然不会达到你上面说的那个结果。要想达到你上面说的那个效果,必须进行线程间通信。比如,你可以让两个线程实例都对方的引用,在run函数里执行打印的方法后,就让t2跑,t1去睡觉(sleep())。等t2打印完后,又让t1跑,让t2去睡觉,这样即可。 给你思路,代码我就不写了。
追问
我也知道要通信。。关键是怎样实现啊。。t1睡觉。。也不知道t2会打印几个。这样就不是交替打印了。。
我邹是想知道
推荐于2017-09-20 · TA获得超过772个赞
知道小有建树答主
回答量:784
采纳率:0%
帮助的人:511万
展开全部
帮你改了改,测试可行

public class ThreadTest1 extends Thread {
private static int num = 0, n = 100;
static ThreadTest1 t1, t2;
static int i = 0;
static int x;
static String ss = new String();

public ThreadTest1() {
start();

}

public void run() {
for (x = 0; x < 200; x++) {
synchronized (ss) {
ss.notify();
Print();
try {
ss.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
synchronized (ss) {
ss.notifyAll();
}
}

public void Print() {
if (i == 0) {
i++;
System.out.println(this.getName() + ":" + ++num);
} else {
i = (i + 1) % 2;
System.out.println(this.getName() + ":" + n++);
}

}

public static void main(String[] args) throws InterruptedException {
t1 = new ThreadTest1();
t2 = new ThreadTest1();
}

}
追问
嗯。。结果还可以。。要是注释下就好了。。还有就是第一个线程从1打印到100..第二个线程从101打印到200就更好了。。要是能写出来。。再给你加20分。。虽然我用另外的方法写出来两个。。但这是我想的最久的。。希望有人帮我写出来。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maxer025
2011-09-15 · 超过14用户采纳过TA的回答
知道答主
回答量:72
采纳率:0%
帮助的人:42.4万
展开全部
用个对象锁,获得对象锁的线程打印就行了。
追问
synchronized(ss)
这个不是对象锁吗???
追答
你这个锁没什么用,打印完后线程就释放了,其他线程或本线程就抢着打印。
算法:抢到锁的线程sleep。等待其他线程唤醒。只有获得锁的线程才打印。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kundan86
2011-09-15
知道答主
回答量:51
采纳率:0%
帮助的人:19.4万
展开全部
...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式