Educoder–Java高级特性(第五章)- 多线程基础(2)常用函数【笔记+参考代码】

Educoder–Java高级特性(第五章)- 多线程基础(2)常用函数【笔记+参考代码】


第一关


1.有三种原因可以导致线程不能运行,它们是( ABC )
A、等待
B、阻塞
C、休眠
D、挂起及由于I/O操作而阻塞

2.Java语言中提供了一个( D )线程,自动回收动态分配的内存。
A、异步
B、消费者
C、守护
D、垃圾收集

3.当( A )方法终止时,能使线程进入死亡状态
A、run
B、setPrority
C、yield
D、sleep

4.用(B )方法可以改变线程的优先级。
A、run
B、setPrority
C、yield
D、sleep

5.线程通过( D )方法可以休眠一段时间,然后恢复运行
A、run
B、setPrority
C、yield
D、sleep

6.下列关于线程的说法正确的是(ABD )
A、如果线程死亡,它便不能运行
B、在Java中,高优先级的可运行线程会抢占低优先级线程
C、线程可以用yield方法使低优先级的线程运行
D、一个线程可以调用yield方法使其他线程有机会运行



第二关


编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

创建自定义线程,实现求第num项斐波那契数列的值num从0开始,并且在main函数中获取子线程最终计算的结果。


测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

输入:5

输出:子线程计算结果为:5

输入:8

输出:子线程计算结果为:21

输入:10

输出:子线程计算结果为:55



参考代码

package step2;

import java.util.Scanner;

public class Task {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		//请在此添加实现代码
		/********** Begin **********/
		Thread t = new MyThread("子线程",num);
		t.start();
		/********** End **********/
	}
}
	//请在此添加实现代码
    /********** Begin **********/
class MyThread extends Thread{
	private int num;
	private String name;
	public MyThread(String name,int num){
		this.num=num;
		this.name=name;
	}
	public void run(){
		int[] arr = new int[2];
        arr[0] = 1;
        arr[1] = 1;
        for (int i = 2; i < num; i++) {
            int tmp = arr[1];
            arr[1] = arr[0] + arr[1];
            arr[0] = tmp;
        }
        System.out.println("子线程计算结果为:"+arr[1]);
	}
}
    /********** End **********/




第三关


编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

建立三个线程,A线程打印5次E,B线程打印5次D,C线程打印5次U,要求线程同时运行,交替打印5次EDU。


测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。



参考代码

package step3;

public class MyThread implements Runnable {   
	   //请在此添加实现代码
	/********** Begin **********/
	private String name;
	private Object prev;
	private Object self;
	private MyThread(String name,Object prev,Object self){
		this.name = name;
		this.prev = prev;
		this.self = self;
	}
	public void run(){
		int count = 5;
		while(count>0){
			synchronized(prev){
				synchronized(self){
					System.out.print(name);
					count--;
					self.notify();
				}
				try {
                    prev.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
				}
			}
		}
		System.exit(0);
	}
 	public static void main(String[] args) throws Exception {   
        Object a = new Object();
        Object b = new Object();
        Object c = new Object();
		MyThread ta = new MyThread("E",c,a);
		MyThread tb = new MyThread("D",a,b);
		MyThread tc = new MyThread("U",b,c);

		new Thread(ta).start();
		Thread.sleep(100);
		new Thread(tb).start();
		Thread.sleep(100);
		new Thread(tc).start();
		Thread.sleep(100);
    }   
	/********** End **********/   
}

猜你喜欢

转载自blog.csdn.net/weixin_44177494/article/details/105285846