得到java线程中信息的两种办法[Java编程]
本文“得到java线程中信息的两种办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在举行多线程编程中,对比重要也是对比艰难的一个操作就是若何获得线程中的信息.大大都人会采纳对比常见的一种办法就是将线程中要返回的后果存储在一个字段中,然后再供应一个获得办法将这个字段的内容返回给该办法的调用者.如以下的ReturnThreadInfo类:
package threadtest1;
/**
*
* @author shi mingxiang
*/
public class ReturnThreadInfo extends Thread {
private String str;
public ReturnThreadInfo() {
this.str = "Hello";
}
public void run(){
this.str = "Hello World!";
}
public String getThreadInfo(){
return this.str;
}
}
大家可以看到该类是一个线程类并含有一个初始值为"Hello"的字段str以及一个可以返回str值的办法:getThreadInfo(),并且当这个线程启动后str会被赋于新值:"Hello World!".目前我想在别的一个类中启动ReturnThreadInfo线程,并通过getThreadInfo()办法获得值为"Hello World!"的变量并打印输出到掌握台中.以下给出一个实现该功效的Main类:
package threadtest1;
/**
*
* @author shi mingxiang
*/
public class Main{
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
ReturnThreadInfo returnThreadInfo = new ReturnThreadInfo();
returnThreadInfo.start(); //成立并启动ReturnThreadInfo线程
System.out.println(returnThreadInfo.getThreadInfo()); //获得并输出returnThreadInfo对象的str的值
}
}
以上是一个大都熟习单线程编程的人在第一反映下给出的实现办法.但是该类在运行的时刻输出的后果却不是盼望的"Hello World!"而是"Hello",这是由于线程的竞争条件招致的(由于ReturnThreadInfo线程和Main线程的优先级都为5,所以在很大概率上ReturnThreadInfo线程的run()办法还没有运行,Main类就已经运行System.out.println(returnThreadInfo.getThreadInfo());将"Hello"输出了.具体的原理可以拜见另一篇文章:"java多线程的几点误区").有的人大概会当即想到把ReturnThreadInfo线程的优先级设高些(比方最大的10)便可以returnThreadInfo线程的run()办法先运行完,然后Main类的System.out.println(returnThreadInfo.getThreadInfo())再运行,这样输出的结就一定是盼望的"Hello World!"了.这种通过调整线程优先级的办法当然可以在某种程度上办理该问题,但是线程争用CPU运行时间的原理却决不但仅只是优先级高低的缘由(优先级高的线程并不意味着一定比优先级低的线程先运行,只是概率要更大一些).你并不但愿ReturnThreadInfo线程9999次都比Main先运行,却在最关键的一次在Main之后再运行.因此下面给出两种对比常见的获得线程信息的办法:
以上是“得到java线程中信息的两种办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |