知识大全 获取java线程中信息的两种方法[2]

Posted

篇首语:今天所做之事勿候明天,自己所做之事勿候他人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 获取java线程中信息的两种方法[2]相关的知识,希望对你有一定的参考价值。

    以上是一个多数熟悉单线程编程的人在第一反应下给出的实现方法 但是该类在运行的时候输出的结果却不是期望的 Hello World! 而是 Hello 这是由于线程的竞争条件导致的(由于ReturnThreadInfo线程和Main线程的优先级都为 所以在很大几率上ReturnThreadInfo线程的run()方法还没有运行 Main类就已经运行System out println(returnThreadInfo getThreadInfo()) 将 Hello 输出了 具体的原理可以参见另一篇文章 java多线程的几点误区 ) 有的人可能会立即想到把ReturnThreadInfo线程的优先级设高些(比如最大的 )就可以returnThreadInfo线程的run()方法先运行完 然后Main类的System out println(returnThreadInfo getThreadInfo())再运行 这样输出的结就一定是期望的 Hello World! 了 这种通过调整线程优先级的方法固然可以在某种程度上解决该问题 但是线程争用CPU运行时间的原理却决不仅仅只是优先级高低的原因(优先级高的线程并不意味着一定比优先级低的线程先运行 只是几率要更大一些) 你并不希望ReturnThreadInfo线程 次都比Main先运行 却在最关键的一次在Main之后再运行 因此下面给出两种比较常见的获取线程信息的方法

    一 轮询

    比较常见的一种解决方案是 让线程类获取方法在结果字段设置之前返回一个标志值 然后主线程定时询问获取方法 看是否返回了标志之外的值 以下给出了具体的实现方法 该方法不断测试str的值是否为 Hello 如果不为 Hello 才打印输出它 例如

 package threadtest ;/**** @author shi mingxiang*/public class Main  public Main()     /**   * @param args the mand line arguments   */  public static void main(String[] args)     ReturnThreadInfo returnThreadInfo = new ReturnThreadInfo();    returnThreadInfo start(); //创建并启动ReturnThreadInfo线程     while(true)      String str = returnThreadInfo getThreadInfo();      if(!str equals( Hello ))         System out println(returnThreadInfo getThreadInfo());         break;              

    这种方案虽然能起到作用 但是它做了大量不需要做的工作 事实上 还有一种更简单有效的方法来解决这个问题

cha138/Article/program/Java/gj/201311/27711

相关参考

知识大全 获取java线程中信息的两种方法[3]

   二回调   轮询方法最大的特点是主类Main不断询问线程类是否结束这实际上大量浪费了运行时间特别是当线程特别多的时候因此如果反过来在线

知识大全 Java获取客户端真实IP地址的两种方法

Java获取客户端真实IP地址的两种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在JSP

知识大全 介绍java 产生随机数的两种方式

   在java中我们可以通过两种方式来获取随机数(generatingarandomnumber)一种是大家熟悉的javalangMathRandom()静态方法另一种

知识大全 在Java程序中采用线程获取优异性能

在Java程序中采用线程获取优异性能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是线程?

知识大全 java读取网站内容的两种方法

  HttpClient  利用apache的虚拟客户端包获取某个地址的内容 importjavaioUnsupportedEncodingException;  importjavauti

知识大全 php获取数组中重复数据的两种方法

  ()利用php提供的函数array_unique和array_diff_assoc来实现复制代码代码如下:<?phpfunctionFetchRepeatMemberInArray($arr

知识大全 C#多线程操作控件的两种安全方式

C#多线程操作控件的两种安全方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实现的功能是  

知识大全 开发JAVA编程中字符串分割的两种方法

开发JAVA编程中字符串分割的两种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  方法:采用

知识大全 java线程简介(其它线程API详细信息)

java线程简介(其它线程API详细信息)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  wai

知识大全 java中super的两种用法

  通过用static来定义方法或成员为我们编程提供了某种便利从某种程度上可以说它类似于C语言中的全局函数和全局变量  但是并不是说有了这种便利你便可以随处使用如果那样的话你便需要认真考虑一下自己是否