· [Java论坛][安全论坛][数据库论坛][操作系统论坛]
· [专题] 赛迪网2009年度IT经典最红榜获奖名单揭晓
· [专题] 百度被黑的技术原因 数据泄漏暗藏惊人杀机
· [IT技术周刊][IT资源下载专区][病毒求助专区]
· [热点] 投票:瑞星漏洞事件 Google遭袭技术细节曝光
· [热点] 黑客盯上个人隐私信息 视频体验IE8智能搜索

彻底明白Java的多线程-线程间的通信 (1)

发布时间:2006.04.20 08:04     来源:赛迪网论坛    作者:

线程间的通信
1.    线程的几种状态
线程有四种状态,任何一个线程肯定处于这四种状态中的一种:
1)    产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。
2)    可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的start()方法后,线程就处于可执行状态,但显而易见的是此时线程不一定正在执行中。
3)    死亡(Dead):当一个线程正常结束,它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态。
4)    停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。当处于停滞状态的线程重新回到可执行状态时,它有可能重新执行。如通过对一个线程调用wait()函数后,线程就进入停滞状态,只有当两次对该线程调用notify或notifyAll后它才能两次回到可执行状态。
2.    class Thread下的常用函数函数
2.1    suspend()、resume()
1)    通过suspend()函数,可使线程进入停滞状态。通过suspend()使线程进入停滞状态后,除非收到resume()消息,否则该线程不会变回可执行状态。
2)    当调用suspend()函数后,线程不会释放它的“锁标志”。
例11:
    class TestThreadMethod extends Thread{
        public static int shareVar = 0;
        public TestThreadMethod(String name){
            super(name);
        }
        public synchronized void run(){
            if(shareVar==0){
                for(int i=0; i<5; i++){
                    shareVar++;
                    if(shareVar==5){
                        this.suspend(); //(1)
                    }
                }
            }
            else{
                System.out.print(Thread.currentThread().getName());
                System.out.println(" shareVar = " + shareVar);
                this.resume(); //(2)
            }
        }
    }
    public class TestThread{
        public static void main(String[] args){
            TestThreadMethod t1 = new TestThreadMethod("t1");
TestThreadMethod t2 = new TestThreadMethod("t2");
t1.start(); //(5)
            //t1.start(); //(3)
            t2.start(); //(4)
        }
}
运行结果为:
t2 shareVar = 5
i.    当代码(5)的t1所产生的线程运行到代码(1)处时,该线程进入停滞状态。然后排程器从线程池中唤起代码(4)的t2所产生的线程,此时shareVar值不为0,所以执行else中的语句。

1 2 3 4 5 下一页>>


[ 发表评论 ] 字体[  ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ]  [ 推荐给朋友 ]
  相关文章
· Springframwork集成Velocity的解决方案 (04-19) · Velocity为Java Web应用开发“增速” (04-19)
· 模板引擎的设计思想最早由Webmacro提出(3) (04-19) · 用Apache Velocity模板引擎速造网站(2) (04-19)
· 用Apache Velocity模板引擎速造网站(1) (04-19) · 关于Java模板引擎Velocity的简单实践 (04-19)
· 自己积累的一些关于Velocity的经验 (04-19) · Java的模板引擎Velocity初体验 (04-19)
· Java代码编写的一般性指导 (09-13) · 给你个比较全的关于时间的操作的东西 (03-23)
  客户需求反馈表
* 姓  名:
更多资料  了解方案  认识厂商
* 单位名称:
* 联系电话:
* 电子邮件:
资讯 通信 IT产品 IT技术 信息化
微软Spark计划:技术点燃梦想
·深度观察:高世代线密集..
·专题:颠覆还是倒退?苹果..
·专题:如何让网络个人信..
专题:动力100——助企业轻松实现立体沟通
·专题:三大运营商"扎堆"..
·专题:谷歌推智能手机Ne..
·直播:2010年中国通信技..
专题:回顾2009 原装耗材与兼容耗材发展
·专题:HP Photosmart Pl..
·专题:超薄超强 戴尔推..
·2009赛迪网年终评选 惠..
无处不挂马 2010年网页挂马大爆发之年
·龙存科技:由BizSpark成..
·易城蓝天宋晨枫:硅谷创..
·采访BizSpark计划创业企..