您的位置:首页 > 编程语言 > Java开发

java 三个线程交替执行

2017-12-27 17:41 417 查看



package
cn.itcast.gz;
import
java.util.concurrent.locks.Condition;
import
java.util.concurrent.locks.Lock;
import
java.util.concurrent.locks.ReentrantLock;
/**
*
第一个线程循环5次,接着第二个线程循环10次,
*
接着第三个线程循环15次,然后又到第一个线程循环5次
*
如此往复执行50次
*
*/
public
class
Interview3
{
public
static
void
main(String[]
args){
ThreadTest3
threadTest3=
new
ThreadTest3();
Thread
t1=
new
Thread(threadTest3);
Thread
t2=
new
Thread(threadTest3);
Thread
t3=
new
Thread(threadTest3);
t1.start();
t2.start();
t3.start();
}
}
class
ThreadTest3
implements
Runnable
{
private
Lock
lock=
new
ReentrantLock();
private
int
j
=
0
;
private
int
k
=
1
;
Condition
con1=lock.newCondition();
Condition
con2=lock.newCondition();
Condition
con3=lock.newCondition();
public
void
father()
{
lock.lock();
try
{
while
(j!=
0
)
con1.await();
for
(
int
i
=
1
;i<=
5
;i++)
{
System.out.println(
"Thread
A..."
+i);
}
j=(j+
1
)%
3
;
con2.signal();
}
catch
(Exception
e){
e.printStackTrace();
}
finally
{
lock.unlock();
}
}
public
void
son()
{
lock.lock();
try
{
while
(j!=
1
)
con2.await();
for
(
int
i
=
1
;i<=
10
;i++)
{
System.out.println(
"Thread
B..."
+i);
}
j=(j+
1
)%
3
;
con3.signal();
}
catch
(Exception
e){
e.printStackTrace();
}
finally
{
lock.unlock();
}
}
public
void
granson()
{
lock.lock();
try
{
while
(j!=
2
)
con3.await();
for
(
int
i
=
1
;i<=
15
;i++)
{
System.out.println(
"Thread
C..."
+i);
}
j=(j+
1
)%
3
;
con1.signal();
}
catch
(Exception
e){
e.printStackTrace();
}
finally
{
lock.unlock();
}
}
@Override
public
void
run()
{
for
(
int
i
=
0
;i<
3
;i++)
{
if
(k==
1
)
{
father();
k=(k+
1
)%
3
;
}
else
if
(k==
2
)
{
son();
k=(k+
1
)%
3
;
}
else
{
granson();
k=(k+
1
)%
3
;
}
}
/*
father();
son();
granson();*/
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: