java多线程学习(二)

java可以支持多线程,线程间的通信无疑是很必要的,我们需要得到一个线程运行的结果。

但问题在于,Thread的run()方法是没有任何返回值的,那这可怎么办?

有的人说,那简单!在线程类中设一个get方法,在这个线程跑起来后,再调用不就行了!

比如这个代码:这里,我们实现的功能是:线程计算100到1000000内的素数的加和(用最笨的方法),计算完后,把结果返回给主程序。


package lunxun;





	class lunxunThread extends Thread{
		private int result;
		
		public int getresult(){
			return result;
		}
		
		public lunxunThread()
		{
			
		}
		
		
		@Override
		public void run()
		{
			int x=0;
			for(int y=100;y<1000000;y++)
			{
				if(issushu(y)==false)
				{
					x=x+y;
				}
			}
			this.result = x;
		}
		
		public boolean issushu(int i)
		{
			for(int x=2;x<Math.sqrt(i);x++)
			{
				if(i%x==0)
				{
					return false;
				}
			}
			return true;
		}
		
	}	
	
public class lunxun {
	
	 public static void main(String[] args) {  //主函数
	        lunxunThread x=new lunxunThread();
	        x.start();
	        System.out.println(x.getresult());
	        
	        
	        
	    } 
	
}	
	







程序很简单,是不是天衣无缝?输出的结果却是:0!

原因也很简单,因为x这个线程对象的run()方法还没跑完呢,完了以后result才会被设置。而在run()没跑完之前,result结果是,0!

这种情况下,如果run()很快,也许会输出正确的结果!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值