| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 508 人关注过本帖
标题:这是两个线程交替进行的小程序 不过好像死锁了 有大牛帮看看 并给说明下原因 ...
只看楼主 加入收藏
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:2 
这是两个线程交替进行的小程序 不过好像死锁了 有大牛帮看看 并给说明下原因吗?
新手求教 自学java。。。 书本上说的不详细 基本自己摸索的

程序就一直停在这里了,好像是两个支线线程都在等待

图片附件: 游客没有浏览图片的权限,请 登录注册


这是代码:

程序代码:
import java.util.*;

class TimeOutput extends Thread
{
    public static volatile boolean stop = false;
    
    public TimeOutput()
    {
        System.out.println("Branch thread begin...");
    }
    
    public void run ()
    {
        System.out.println("Branch thread runnable...");
        while (!stop)
        {
            synchronized (this)
            {
                try
                {
                    System.out.println("Branch thread notify others...");
                    notifyAll();
                    System.out.println("Branch thread waiting...");
                    wait();
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            Calendar temp = Calendar.getInstance();
            System.out.println(temp.get(Calendar.YEAR) + " : " + temp.get(Calendar.MONTH)
                    + " : " + temp.get(Calendar.DAY_OF_MONTH) + "     " + temp.get(Calendar.HOUR_OF_DAY)
                    + " : " + temp.get(Calendar.MINUTE) + " : " + temp.get(Calendar.SECOND));
        }
        System.out.println("Branch thread ended");
    }
}

class PriNumJudge extends Thread
{
    public PriNumJudge()
    {
        System.out.println("Main thread begin...");
    }
    
    public void judgement(int temp)
    {    
        System.out.println("Judge " + temp + " is a prime number or not.");        
        
        boolean flag = true;
        if (temp < 2)
        {
            System.out.println("Judgement input number error.");
        }
        else if ((2 == temp) || (3 == temp))
        {
            System.out.println(temp + " is a prime number.");            
        }
        else
        {
            for (int i = 2; i <= Math.sqrt(temp); i++)
            {
                if (temp % i == 0)
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
            {
                System.out.println(temp + " is a prime number.");
            }
            else
            {
                System.out.println(temp + " isn't a prime number.");
            }
        }
        System.out.println("Judge " + temp + " completed.");
    }
    
    public void run()
    {
        System.out.println("Main thread runable...");
        synchronized (this)
        {
            for (int i = 1; i < 100; i++)        
            {                        
                try
                {
                    System.out.println("Main thread notify others...");
                    notifyAll();
                    System.out.println("Main thread waiting...");
                    wait();
                }
                catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
                this.judgement(i);
            }
            System.out.println("Change loop condition...");
            TimeOutput.stop = true;
        }
        System.out.println("Main thread ended.");
    }
}
public class Test4
{
    public static void main(String[] args)
    {
        System.out.println("Main method begin...");
        PriNumJudge mainThread = new PriNumJudge();
        mainThread.start();
        TimeOutput branchThread = new TimeOutput();
        branchThread.start();
        System.out.println("Main method ended");        
    }
}
搜索更多相关主题的帖子: color java 
2014-05-12 14:26
qwe885167759
Rank: 4
等 级:业余侠客
威 望:5
帖 子:148
专家分:259
注 册:2013-3-12
收藏
得分:20 
好像是第二个类的temp参数不对,没注释,看不清

我本楚狂人,凤歌笑孔丘
2014-05-12 22:10
神机军师
Rank: 7Rank: 7Rank: 7
来 自:游鱼潜水
等 级:黑侠
威 望:2
帖 子:202
专家分:542
注 册:2013-12-21
收藏
得分:0 
这个程序就是 想建立俩线程 然后一个是算是不是质数  另一个显示当前时间
想让他们交替运行 但是 好像我对notify() wait()方法应用错误 是理解不够透彻。。
不知道有木有谁稍微讲一下 javadoc 书本也没有得到想要的解答

未知令人期待!
2014-05-13 09:08
快速回复:这是两个线程交替进行的小程序 不过好像死锁了 有大牛帮看看 并给说明 ...
数据加载中...
 
   



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

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