线程题目,会的回答
答了的朋友,请附上详细解说。谢谢!线程A和线程B分别在屏幕上显示信息“……start”后,调用wait等待;线程c开始后调用sleep休眠一段时间,然后调用notifyall,使
线程A和线程B继续运行。线程A和线程B恢复运行后输出信息“……end”后结束,线程c在判断线程B和线程A结束后,自己也结束运行。
请附上详细解说。谢谢!
搜索更多相关的解决方案:
线程
----------------解决方案--------------------------------------------------------
没人会。还是?
----------------解决方案--------------------------------------------------------
还是没人回答我。
----------------解决方案--------------------------------------------------------
程序代码:
public class Hello {
public static void main(String[] args) {
Object lock = new Object();
A a = new A(lock);
B b = new B(lock);
C c = new C(a,b,lock);
a.start();
b.start();
c.start();
boolean b1=false,b2=false,b3=false;//b1代表a线程是否结束,b2代表b线程是否结束,b3代表c线程是否结束
while(true){
if(!a.isAlive()&&!b1){
System.out.println("a is closed");
b1=true;
}
if(!b.isAlive()&&!b2){
System.out.println("b is closed");
b2=true;
}
if(!c.isAlive()&&!b3){
System.out.println("c is closed");
b3=true;
}
if(b1&&b2&&b3)
break;
}
}
}
class A extends Thread{
Object lock = null;
//从构造函数中传入3个线程竞争的锁
public A(Object lock){
this.lock = lock;
}
public void run(){
synchronized (lock) {
System.out.println(".................A start");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(".................A end");
}
}
}
class B extends Thread{
Object lock = null;
public B(Object lock){
this.lock = lock;
}
public void run(){
synchronized (lock) {
System.out.println(".................B start");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(".................B end");
}
}
}
class C extends Thread{
A a;
B b;
Object lock = null;
//从构造函数中传入3个线程竞争的锁,并传入a,b线程
public C(A a, B b, Object lock){
this.a=a;
this.b=b;
this.lock = lock;
}
public void run(){
try {
sleep(3*1000); //线程休眠3秒钟
synchronized (lock) {
lock.notifyAll(); //释放所有在等待中的锁,并且被释放的所有锁公平竞争取得锁
}
while(a.isAlive()||b.isAlive());//如果a,b线程没有结束,则c不能结束。
//this.interrupt();//线程运行完会自动结束,不需要自己去中断。
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Object lock = new Object();
A a = new A(lock);
B b = new B(lock);
C c = new C(a,b,lock);
a.start();
b.start();
c.start();
boolean b1=false,b2=false,b3=false;//b1代表a线程是否结束,b2代表b线程是否结束,b3代表c线程是否结束
while(true){
if(!a.isAlive()&&!b1){
System.out.println("a is closed");
b1=true;
}
if(!b.isAlive()&&!b2){
System.out.println("b is closed");
b2=true;
}
if(!c.isAlive()&&!b3){
System.out.println("c is closed");
b3=true;
}
if(b1&&b2&&b3)
break;
}
}
}
class A extends Thread{
Object lock = null;
//从构造函数中传入3个线程竞争的锁
public A(Object lock){
this.lock = lock;
}
public void run(){
synchronized (lock) {
System.out.println(".................A start");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(".................A end");
}
}
}
class B extends Thread{
Object lock = null;
public B(Object lock){
this.lock = lock;
}
public void run(){
synchronized (lock) {
System.out.println(".................B start");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(".................B end");
}
}
}
class C extends Thread{
A a;
B b;
Object lock = null;
//从构造函数中传入3个线程竞争的锁,并传入a,b线程
public C(A a, B b, Object lock){
this.a=a;
this.b=b;
this.lock = lock;
}
public void run(){
try {
sleep(3*1000); //线程休眠3秒钟
synchronized (lock) {
lock.notifyAll(); //释放所有在等待中的锁,并且被释放的所有锁公平竞争取得锁
}
while(a.isAlive()||b.isAlive());//如果a,b线程没有结束,则c不能结束。
//this.interrupt();//线程运行完会自动结束,不需要自己去中断。
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
----------------解决方案--------------------------------------------------------
谢谢!
----------------解决方案--------------------------------------------------------
回复 4楼 linjx0123
我用C语言写一个线程,想计算整个工程的代码从开始到结束用了多少时间,用clock()函数得到开始时间,应该把该函数放在哪里。谢谢。怎么停止六个线程。或许我写的不清晰。谢谢。
----------------解决方案--------------------------------------------------------