黑马程序员技术交流社区
标题:
Java如何实现三个线程交替运行啊
[打印本页]
作者:
Conning
时间:
2014-5-12 20:46
标题:
Java如何实现三个线程交替运行啊
我在做一个题目,第一个线程打印1 2 3 4 5 第二个线程打印 6 7 8 9 10 第三个线程打印 11 1213 14 15 如何交替下去打印到75啊
作者:
倪大大
时间:
2014-5-12 21:16
代码太麻烦了.思想就是 你设置一个计数器,比如 当i=1 的时候 只有线程1能打印,打印完后 将i自增
然后当i=2的时候 只能线程2打印,打印完再自增.当i=3的时候线程3打印,打印完后将i重置为1就行了
作者:
Conning
时间:
2014-5-12 21:34
做出来了,没有用到Lock接口。。。只用同步代码块实现了
class ThreadPrint implements Runnable
{
int count=1;
int k=1;
private void sop()
{
for(int i=0;i<5;i++)
{
System.out.println(Thread.currentThread().getName()+":"+count++);
}
}
public void run()
{
while(count<=75)
{
synchronized(this)
{
if(k==1)
{
if(Thread.currentThread().getName().equals("线程1"))
{
sop();
k=(k+1)%3;
this.notifyAll();
try{this.wait();}catch(Exception e){}
}
else
{
try{this.wait();}catch(Exception e){};
}
}
else if(k==2)
{
if(Thread.currentThread().getName().equals("线程2"))
{
sop();
k=(k+1)%3;
this.notifyAll();
try{this.wait();}catch(Exception e){}
}
else
{
try{this.wait();}catch(Exception e){};
}
}
else
{
if(Thread.currentThread().getName().equals("线程3"))
{
sop();
k=(k+1)%3;
if(count>75)
{
this.notifyAll();
}
else
{
this.notifyAll();
try{this.wait();}catch(Exception e){}
}
}
else
{
try{this.wait();}catch(Exception e){};
}
}
}
}
}
}
public class ThreadTest
{
public static void main(String args [])throws Exception
{
ThreadPrint tp=new ThreadPrint();
Thread t1=new Thread(tp,"线程1");
Thread t2=new Thread(tp,"线程2");
Thread t3=new Thread(tp,"线程3");
t1.start();
t2.start();
t3.start();
}
}
作者:
skill20
时间:
2014-5-13 00:05
这个随便弄的好像也行。。。
package cn.itcast.day;
public class ThreadTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
My_Print mp = new My_Print();
new Thread(mp,"1").start();
new Thread(mp,"2").start();
new Thread(mp,"3").start();
}
}
class My_Print implements Runnable{
private int num = 1;
private int k = 1;
public void print(){
for(int x = 0; x < 5 ;x++)
System.out.println(Thread.currentThread().getName()+ "::" + num++);
}
@Override
public void run() {
// TODO Auto-generated method stub
while(num <= 75){
if(k == 1&&Thread.currentThread().getName().equals("1")&& num <= 75){
print();
k = 2;
}
if(k == 2&&Thread.currentThread().getName().equals("2")&& num <= 75){
print();
k = 3;
}
if(k == 3&&Thread.currentThread().getName().equals("3")&& num <= 75){
print();
k = 1;
}
}
}
}
复制代码
作者:
少先队员
时间:
2014-5-13 00:29
你创建类 实现Runnable 这个接口就可以了, 你好好看看视频啊。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2