EduCoderJava⾼级特性-多线程基础(2)常⽤函数第1关:线程的状态与调度
任务描述
本关任务:学习本关知识完成选择题
1、有三种原因可以导致线程不能运⾏,它们是( ABC)
A、等待
B、阻塞
C、休眠
D、挂起及由于I/O操作⽽阻塞
2、Java语⾔中提供了⼀个(D )线程,⾃动回收动态分配的内存。
A、异步
零基础学java编程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⽅法使其他线程有机会运⾏
第2关:常⽤函数(⼀)
任务描述
本关任务:获取⼦线程执⾏的结果并输出。
编程要求
请仔细阅读右侧代码,根据⽅法内的提⽰,在Begin - End区域内进⾏代码补充,具体任务如下:
创建⾃定义线程,实现求第num项斐波那契数列的值num从0开始,并且在main函数中获取⼦线程最终计算的结果。
测试说明
补充完代码后,点击测评,平台会对你编写的代码进⾏测试,当你的结果与预期输出⼀致时,即为通过。
通关代码
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 **********/
第3关:常⽤函数(⼆)
任务描述
本关任务:使⽤三个线程交替打印5次EDU。
编程要求
请仔细阅读右侧代码,根据⽅法内的提⽰,在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--;
}
try {
prev.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
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 **********/
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论