| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 561 人关注过本帖
标题:新手学线程的问题
只看楼主 加入收藏
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
结帖率:76.47%
收藏
已结贴  问题点数:10 回复次数:4 
新手学线程的问题
public class Spy {
    public static void main(String[] args)
    {
        TreeHore th=new TreeHore();
        SpyMan sm=new SpyMan(th);
        ImformationMan im=new ImformationMan(th);
        sm.start();
        im.start();
    }
}
class SpyMan extends Thread
{
    TreeHore th;
    SpyMan(TreeHore th)
    {
        this.th=th;
    }
    public void run()
    {
        for(int i=0;i<10;i++)
        {
            th.put(i);
            System.out.println("spy put"+i+"imformation");
        }   
    }
}
class ImformationMan extends Thread
{
    TreeHore th;
    ImformationMan(TreeHore th)
    {
        this.th=th;
    }
    public void run()
    {
        th.get();
    }
}
class TreeHore
{
   int value;
   boolean b=false;
   synchronized void put(int i)
   {
       if(b==false)
       {
           this.value=i;
           b=true;
           notify();
       }
       try
       {
           wait();
       }
       catch(Exception e)
       {
           e.printStackTrace();
       }
   }
   synchronized int get()
   {
       if(b==false)
       {
           try
           {
               wait();
           }
           catch(Exception e)
           {
               e.printStackTrace();
           }
       }
       System.out.println("Imformation get"+value+"imformation");
       b=false;
       notify();
       return value;
   }
}
以上程序主要想实现的功能是:间谍把情报放到树洞以后,等待,然后通知情报员,接着情报员去树洞取情报,情报员取了情报以后,等待,通知间谍接着放情报,循环10次,但是我这个执行了1次好象就死锁了还是什么,就出现
Imformation get0imformation
spy put0imformation
请高手帮忙看下,谢谢
搜索更多相关主题的帖子: 线程 
2009-10-21 11:19
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
收藏
得分:0 
急啊,有人能解答下吗?
2009-10-21 12:17
dadongzicool
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:209
专家分:474
注 册:2009-3-20
收藏
得分:5 
线程同步是指若干个线程都需要使用一个sycchronized修饰的方法

希望楼主再好好看一下线程同步的内容

 
public class Spy
{
    public static void main(String[] args)
    {
        String smName="情报员",imName="间谍";
        TreeHore th=new TreeHore(smName,imName);
        Thread sm,im;
        sm=new Thread(th);
        im=new Thread(th);
        sm.setName(smName);
        im.setName(imName);
        sm.start();
        im.start();
    }
}
class TreeHore implements Runnable
{
    String smName,imName;
    TreeHore(String s1,String s2)
    {
        smName=s1;
        imName=s2;
    }
    public void run()
    {
        for(int i=0;i<10;i++)
          putOrGet(i);
    }
    public synchronized void putOrGet(int i)
    {
        if(Thread.currentThread().getName().equals(smName))
        {
            System.out.println("spy put "+i+" imformation");
            try
            {
                Thread.sleep(1000);
            }
            catch(InterruptedException e)
            {
                System.out.println(e);
            }
         
        }
        else if(Thread.currentThread().getName().equals(imName))
        {
            System.out.println("Imformation get "+i+" imformation");
            try
            {
                Thread.sleep(1000);
            }
            catch(InterruptedException e)
            {
                System.out.println(e);
            }
        }
    }
}
这是我自己写的一段代码  不足之处请多多包涵

本人出售软件专业毕业设计(包括论文,代码)题目众多,价格从优联系方式:QQ
1635008514(寻找高校代理)
2009-10-21 14:21
流星雨
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:JAVA风暴
等 级:版主
威 望:43
帖 子:1854
专家分:1868
注 册:2004-5-30
收藏
得分:5 
楼上的已经给你答了,你去网上sycchronized的相关资料,并且你还需要明白
wait():sleep():notify():Allnotity():

感谢你们带我找到星空下美丽神话,无论经历多少苦痛也不放弃的梦;插上希望翅膀乘风我和你们飞翔,飞过海天尽头携手把梦想实现.....
2009-10-21 23:37
caochuan2000
Rank: 2
等 级:论坛游民
帖 子:66
专家分:35
注 册:2009-4-11
收藏
得分:0 
我就是想练习wait() notify()啊,你给的这段程序没用这2个方法
2009-10-22 11:19
快速回复:新手学线程的问题
数据加载中...
 
   



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

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