Java多线程实例

众所周知,多线程是Java语言最重要的特性之一。一个程序在其执行过程中,可以产生多个线程,形成多条执行线索。每条线程,有产生、存在和消亡的过程。程序中多个线程,按照自己的执行路线并发工作,独立完成各自的功能,互不干扰。多线程的执行也是以划分CPU时间片为主要方式的,每个线程会再执行期间被分到单独的一个时间片,在此期间其他的应用程序休眠等待,可以说多线程极大地提高了程序运行的效率,是java开发大型程序必不可少的一道机制。

下面这个例子就是用多线程实现的一个算数小例子。

package Summation;

//求完数的线程
public class PerfectThread extends Thread{
	int i, j, count, n;  //静态变量n是最终结果,在主类中调用
	//构造方法,主类里输入最大值10000
	public PerfectThread(int n) {
		this.count = n;
	}
	//重写run方法,内容是求count以内的完数之和
	public void run() {
		for(i=2; i<count; i++) {
			int sum=0;  //sum是因子之和,i是扫描的每一个数
			for(j=1; j<i; j++) {
				if(i%j==0) { //可以整除说明是因子,加到sum中
					sum+=j;
				}
			}
			if(sum==i) {  //如果因子之和等于这个数,就加到n中,n为目前所加起来的完数之和
				n+=sum;
			}
		}
	}
}

package Summation;

//求素数的线程
public class PrimeThread extends Thread{
	int i, j, sum=0;  //变量s是最终结果,在主类中调用
	int count;  //count是在主类中输入的上限10000
	//构造方法
	public PrimeThread(int m) {
		this.count = m;
	}	
	//重写run方法求素数之和
	public void run() {
		for(i=2; i<count; i++) {   //从2开始作为被除数,1不是素数
			for(j=2; j<i; j++) {   //从2开始到i作为除数
				if(i%j==0){   //如果可以整除说明不是素数跳出循环继续扫描下一个i
					break;
				}				
			}
			if(j==i) {  //如果内层循环结束跳出的循环就说明是素数加到sum里
				sum+=i;
			}
		}
	}	
}

package Summation;
import java.math.*;

public class Textsum {
	public static void main(String[] args) throws InterruptedException {
		PrimeThread t1 = new PrimeThread(10000);  //定义素数和对象10000之内
		PerfectThread t2 = new PerfectThread(10000);   //定义完数和对象10000之内
		//启动两个线程
		t1.start();
		t2.start();
		//等待两个线程全部死亡(结束)
		t1.join();
		t2.join();
		//将两个线程中的两个int型和数转化为大数类
		BigDecimal sum1 = BigDecimal.valueOf((int)t1.sum);
		BigDecimal sum2 = BigDecimal.valueOf((int)t2.n);
		//定义一个大数类对象引用作为最终结果
		BigDecimal total = new BigDecimal(0);
		//两个和数相乘,输出结果
		total = sum1.multiply(sum2);
		System.out.println("10000以内素数和完数之和的乘积为:"+ total);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值