java线程综合练习

java线程综合练习

制作不易!点个关注!给大家带来更多价值!

1.过Thread类创建线程

任务描述
从Thread类派生出一个子类,该子类的功能是完成指定参数阶乘的运算。

相关知识
java.lang.Thread类直接继承了Object类,并实现了Runnable接口,封装了线程对象需要的属性和方法。

通过Thread派生类创建线程的步骤是:首先创建一个Thread的派生类并重写其run方法(需要线程执行的代码就写在run方法中);然后创建该派生类的一个实例;最后在合适的地方调用该实例的start方法;子线程需要的参数可以写在派生类的成员数据中。

特别注意,是调用start方法!!!
如果在程序中调用了run方法,则该段代码一样会被执行,但是会在主线程中(即调用线程)执行,而不会在新建的子线程中执行。

本实训的根本目标就是要新建一个子线程,在新的子线程中完成指定操作。

编程要求
本关一共2个文件Main.java与MyThread.java。
其中Main.java文件不允许编辑,其内容如下

package step1;
import java.util.Scanner;
import java.lang.Thread;
public class Main{

public static void main(String[]args) {    
    //输入一个整数
    Scanner cin = new Scanner(System.in);
    int n = cin.nextInt();
    //用来标记主线程开始
    System.out.println("Main Thread starts.");
    //MyThread是Thread的派生类,而thread是MyThread的实例
    Thread thread = new MyThread(n);
    //执行线程
    thread.start();        
    //标记主线程结束
    System.out.println("Main Thread ends.");
    cin.close();
    return;
}

}
其主要功能是输入一个整数,计算阶乘并输入。
特别的,要求阶乘的输出在主线程结束之后,也就是阶乘输出必须在"Main Thread ends."这一行之后。

通过创建一个子线程来实现这一点。子线程的实例化及执行代码已写在Main.java中。用户需要补全MyThread.java中的内容,创建一个完整的MyThread类以配合Main.java满足任务要求。

package step1;
import java.lang.Thread;

public class MyThread extends Thread {
   
	private int num;//任务就是在子线程中计算num的阶乘
	
	public MyThread() {
   
		this(0);
	}
	
	//constructor,创建实例的时候初始化参数
	public MyThread(int num) {
   
		/***begin your code here***/ 
		this.num=num;
		/***end your code***/
	}
	
    @Override
    public void run() {
       	
    	//重写run方法,在子线程中想要执行的代码写在run方法中
    	int result = 1;//result保存计算出的结果
    	
        /***begin your code here***/ 
	    int i;
    	for (i = num; i > 0; --i)
    		result *= i;
		/***end your code***/
    	
    	//直接输出结果
    	System.out.println(result);
    }
}



2.通过Runnable接口创建线程

任务描述
创建一个实现了Runnable接口的类,并用该类的一个实例去实例化Thread类,从而得到一个子线程,并执行它。
该子线程的主要功能是计算给定参数的阶乘并输出。

相关知识
Runnable是一个接口,任何类均可以通过implements关键字去实现该接口。具体而言就是要重写run方法。

凡是实现了Runnable接口的类,均可以看作是Runnable的一个实现。而Java的Thread类可以接受一个Runnable实现作为参数,创建出一个新的子线程实例。该子线程的具体运行代码即Runnable接口中的run方法。

编程要求
本关一共2个文件Main.java与MyRunnable.java。
其中Main.java文件不允许编辑,其内容如下

package step2;
import java.util.Scanner;
import java.lang.Thread;
public class Main{

public static void main(String[]args) {        
    //输入一个整数
    Scanner cin = new Scanner(System.in);
    int n = cin.nextInt();
    //用来标记主线程开始
    System.out.println("Main Thread starts.");
    //MyRunnable实现了Runnable接口
    MyRunnable r = new MyRunnable(n);
    //使用MyRunnable的实例去实例化一个Thread
    Thread thread = new Thread(r);
    //执行线程
    thread.start();
    //标记主线程结束
    System.out.println("Main Thread ends.");
    cin.close();
    return;
}

}
其主要功能是输入一个整数,计算阶乘并输入。
特别的,要求阶乘的输出在主线程结束之后,也就是阶乘输出必须在"Main Thread ends."这一行之后。

通过创建一个子线程来实现这一点。该子线程通过一个Runnable参数创建。创建及执行代码已在Main.java中完成。用户需要补全MyRunnable.java中的内容以配合Main.java满足任务要求。

package step2;

public class MyRunnable implements Runnable {
   
	private int num;
	
    public MyRunnable() {
   
    	this(0);
    }
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值