| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 769 人关注过本帖
标题:线程题目,会的回答
只看楼主 加入收藏
小程序员
Rank: 2
等 级:论坛游民
帖 子:41
专家分:16
注 册:2010-3-8
结帖率:50%
收藏
已结贴  问题点数:2 回复次数:5 
线程题目,会的回答
答了的朋友,请附上详细解说。谢谢!

线程A和线程B分别在屏幕上显示信息“……start”后,调用wait等待;线程c开始后调用sleep休眠一段时间,然后调用notifyall,使
线程A和线程B继续运行。线程A和线程B恢复运行后输出信息“……end”后结束,线程c在判断线程B和线程A结束后,自己也结束运行。

请附上详细解说。谢谢!
搜索更多相关主题的帖子: 线程 
2010-05-26 23:13
小程序员
Rank: 2
等 级:论坛游民
帖 子:41
专家分:16
注 册:2010-3-8
收藏
得分:0 
没人会。还是?
2010-05-27 18:11
小程序员
Rank: 2
等 级:论坛游民
帖 子:41
专家分:16
注 册:2010-3-8
收藏
得分:0 
还是没人回答我。
2010-05-27 20:41
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
收藏
得分:1 
程序代码:
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();          
        }
    }
}
2010-05-28 11:18
小程序员
Rank: 2
等 级:论坛游民
帖 子:41
专家分:16
注 册:2010-3-8
收藏
得分:0 
谢谢!
2010-05-28 12:33
张春萧
Rank: 1
等 级:新手上路
帖 子:9
专家分:1
注 册:2010-4-21
收藏
得分:1 
回复 4楼 linjx0123
我用C语言写一个线程,想计算整个工程的代码从开始到结束用了多少时间,用clock()函数得到开始时间,应该把该函数放在哪里。谢谢。怎么停止六个线程。
或许我写的不清晰。谢谢。
2010-05-28 21:13
快速回复:线程题目,会的回答
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029000 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved