当前位置:  技术问答>java相关

java的线程问题。难!

    来源: 互联网  发布时间:2015-02-07

    本文导语:  程序的执行环境:windows2000,jdk1.3. 问题:我有两个类,一个是主程序类,一个是线程类。在主程序里启动一定       数目的线程。我怎么才能在主程序中知道所有线程都已执行完毕,而       后主程序再结束。 ...

程序的执行环境:windows2000,jdk1.3.
问题:我有两个类,一个是主程序类,一个是线程类。在主程序里启动一定
      数目的线程。我怎么才能在主程序中知道所有线程都已执行完毕,而
      后主程序再结束。
我已经用过在主程序里用循环的方法判断每一个线程是否死掉,但这样做效
率太低。有没有更好的方法,或不用循环判断的方法。

|
好像jdk里有个这样的例子吧?去找找看。

具体实现方法记得是:子线程类有个静态变量,每创建一个子线程就把该变量加1;
每个子线程退出时把该变量减1;当该变量减到0时,通知主线程,然后主线程退出。

|
try something like this:
1. keep a thread count, when you create a new thread, increment the count (needs synchronized)
2. pass into the new thread an instance of an interface the main thread implements
3. When the new thread ends, it will call some function in that inteface. In this function, the thread count (needs synchronized) will be decremented. When the count becomes 0, it will notify the main thread, then you can terminate the main thread

|
首先,你的main  thread在产生完所有的其他线程之后,要记住
产生了几个(有没有超生游击队),并且不能退出去,而要等在那儿,你可
可以用Object.wait()

每个工作线程在结束之前,要通知主线程,可以用
Object.notify()/Object.notifyAll()

主线程被唤醒后,要计算/判断当前活着的工作线程数,若为0则
退出,否则继续Object.wait()


以上未考虑notify失效等问题,不是很实用,每个工作线程在退出
前,可和主线程多次通信,确保counter被剪过再退出:要不然不是
白牺牲了吗?哈哈哈哈哈


|
是有while,但不是死循环,没有影响效率:

class mainThread{
    static byte[] counterLocker = new byte[0];  //a locker
    static int counter;

     mainDo(){
         //make new Thread;
         counter++;

        while (counter>0) {
            synchronized(counterLocker){
                 counterLocker.wait();
                 counter--;
            }
        }
    }

}


working Thread 大概是这样的:
 public void run(){
     //...

    mainThread.counterLocker.notify();}
}

大概是这样的。。。

|

我的程序中有这样的方法:

每创建一个新的线程时,把自己加入一个vector中,退出时就把自己从vector中移出。

因为我的程序没有必要在vector为空时退出,不过我想你可以开出一个新的线程来监视vector是否为空,不用循环,因为是vector,对吧,其实与你的想法差不多。

在我的程序中只是要主线程结束时,让每个线程都能释放所点用的资源。


|
你把所有的线程都放入一个线程组,用activeCount()函数来判断此线程组中还有没有线程运行,入返回为0就说明运行完毕。(我的一点建议,希望对你有一点帮助)

    
 
 

您可能感兴趣的文章:

  • Java中多线程相关类Thread介绍
  • java 线程,对当前线程(非主线程)调用sleep,为什么主线程(窗口)也没反应了
  • 输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程
  • java基本教程之多线程基本概念 java多线程教程
  • 请问在java多线程中,是只有run(){}内的代码运行在一个新线程下呢?还是这个类中的代码都运行在一个新线程下?
  • 用什么方法可以查看在windows下jvm下运行当前java程序的线程数和线程名称?
  • java多线程编程之捕获子线程异常示例
  • java线程怎么调用java的application.class?
  • java多线程编程之使用runnable接口创建线程
  • java线程中如何降低CPU的占用率?我这几个线程会不会死锁?
  • java线程之使用Runnable接口创建线程的方法
  • java 多线程问题
  • Java线程的相关方法详细解析
  • 紧急求助java多线程编程!!!!!!!!!!!!!
  • java线程,回答得比较深就好了
  • Java多线程之中断线程(Interrupt)的使用详解
  • 关于java线程调度优先级
  • java基本教程之线程让步 java多线程教程
  • Java多线程单元测试 Thread Weaver
  • 求教JAVA中的延时函数!不是用于线程中的!
  • java中多线程的问题
  • Java读写包括中文的txt文件时不同编码格式问题解决
  • 菜鸟的问题:java与java script 的异同??
  • java新手的问题,java高手帮忙...
  • 低级问题:.java文件交付用户怎么运行,难道也是DOS下:java xx.java?有没有.exe?
  • Java读写包括中文的txt文件时不同编码格式问题解决 iis7站长之家
  • java.sql.Date和java.uitl.Date的问题?
  • 问大哥大姐们个问题啊,小第编了自己的第一个JAVA问题。用JAVAC编译能通过啊!可是用JAVA不能执行啊!
  • 最入门级的java问题,如何运行HelloWorld.java
  • 请教一些JAVA的基本问题,初学JAVA有些迷糊,帮帮忙!总迷糊实在受不了了!
  • Linux下面的开发好的Java程序,如何部署到其他机器?开发好的Java图形程序,终端上能否用?等问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3