加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程作业

发布时间:2020-12-14 06:33:24 所属栏目:Java 来源:网络整理
导读:p align="center" 多线程作业 p align="center" ? p class="1" 一、??? 填空题 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入___阻塞______状态。 处于新建状态的线程被启动后,将

<p align="center">多线程作业


<p align="center">?


<p class="1">一、??? 填空题

  1. 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入___阻塞______状态。
  2. 处于新建状态的线程被启动后,将进入线程队列排队等待CPU,此时它已具备了运行条件,一旦轮到享用CPU资源就可以获得执行机会。上述线程是处于状态。
  3. 一个正在执行的线程可能被人为地中断,让出CPU的使用权,暂时中止自己的执行,进入状态。
  4. 在Java中编写实现多线程应用有两种途径:一种是继承Thread类创建线程,另一种是实现接口创建线程。
  5. 在线程控制中,可以调用_____join()_______方法,阻塞当前正在执行的线程,等插队线程执行完后后再执行阻塞线程。
  6. 多线程访问某个共享资源可能出现线程安全问题,此时可以使用____synchronized____________关键字来实现线程同步,从而避免安全问题出现,但会影响性能,甚至出现死锁。
  7. ?在线程通信中,调用wait( )可以是当前线程处于等待状态,而为了唤醒一个等待的线程,需要调用的方法是___notify()___________。
  8. 在线程通信中,可以调用wait()、notify()、notifyAll()三个方法实现线程通信,这三个方法都是______Object________类提供的public方法,所以任何类都具有这三个方法。

二、??? 选择题

1.

下列关于Java线程的说法正确的是( A?? )。(选择一项)

A

每一个Java线程可以看成由代码、一个真实的CPU以及数据三部分组成

B.

C.

Thread类属于java.util程序包(java.lang.Thread)

D.

使用new Thread(new X()).run();方法启动一个线程

?

2.

以下选项中可以填写到横线处,让代码正确编译和运行的是( A?? 。(选择一项)

?

public class Test implements Runnable {

public static void main(String[] args) {

out.println("main");

public void run() {

out.println("thread1!");

A.

B.

C.

D.

?

3.

如下代码创建一个新线程并启动线程,问:四个选项中可以保证正确代码创建target对象,并能编译正确的是(? C?? )?(选择一项)

?

public static void main(String[] args) {

new MyRunnable( );?

new Thread(target);

A

public class MyRunnable extends {

public void run( ) {

B.

public class MyRunnable extends {

void run( ) {

C.

public class MyRunnable? implements Runnable? {

public void run( ) {

}

D.

public class MyRunnable? implements Runnable? {

???????? void run( ) {

}

}

?

4.

当线程调用start( )后,其所处状态为( C?? )。(选择一项)

A

B.

C.

D.

?

5.

下列关于Thread类提供的线程控制方法的说法中,错误的是(C??? )。(选择一项)

A

线程A中执行线程B的join()方法,则线程A等待直到B执行完成

B.

C.

若线程A调用方法isAlive()返回值为false,则说明A正在执行中,也可能是可运行状态

D.

currentThread()方法返回当前线程的引用

?

6.

下列关于线程的优先级说法中,正确的是(? B C? )。(选择两项)

A

线程的优先级是不能改变的

B.

C.

在创建线程后的任何时候都可以重新设置

D.

线程的优先级的范围在1-100之间

?

7.

以下选项中关于Java中线程控制方法的说法正确的是( A D?? )。(选择二项)

A.

join ( ) 的作用是阻塞指定线程等到另一个线程完成以后再继续执行

B.

C.

D.

setDaemon( )的作用是将指定的线程设置成后台线程

?

8.

在多个线程访问同一个资源时,可以使用(? A? 关键字来实现线程同步,保证对资源安全访问。(选择一项)

A.

B.

C.

D.

?

9.

Java中线程安全问题是通过关键字(? C?? )解决的?。(选择一项)

A.

finally

B.

C.

D.

notify( )

10.

以下说法中关于线程通信的说法错误的是(??? D?。(选择一项)

A.

可以调用wait()、notify()、notifyAll()三个方法实现线程通信

B.

C.

D.

wait()、notify()、notifyAll()是Object类提供的方法,子类可以重写

?

三、??? 判断题

  1. 进程是线程Thread内部的一个执行单元,它是程序中一个单一顺序控制流程。( F? )
  2. 一个进程可以包括多个线程。两者的一个主要区别是:线程是资源分配的单位,而进程CPU调度和执行的单位。( F?? )
  3. 用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start进入就绪状态。( T?? )
  4. 线程可以用yield使低优先级的线程运行。( T?? )
  5. Thread.sleep( )方法调用后,当等待时间未到,该线程所处状态为阻塞状态。当等待时间已到,该线程所处状态为运行状态。( F?? )? 就绪
  6. 当一个线程进入一个对象的一个synchronized方法后,其它线程不可以再进入该对象同步的其它方法执行。( T? )

四、??? 简答题

  1. 简述进程和线程的联系和区别。

    进程:一个程序对一个数据集的动态执行过程,是分配资源的基本单位,是资源分配的最小单位     线程:一个进程内的基本调度单位,CPU调度和执行的单位,是程序执行的最小单位

    区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

  1. 创建线程的两种方式分别是什么?各有什么优缺点

    第一种方式:使用Runnable接口创建线程,重写run方法     第二种方式:直接继承Thread类创建对象,重写run方法

    Runnable:接口方案的优点:降低类与类的耦合性,缺点是书写复杂

    Thread继承方案的优点:书写简单,缺点是耦合性太高?

  1. 请你简述sleep( )和wait( )有什么区别?

  (1)同步锁的对待不同:

    sleep()后,程序并不会不释放同步锁。

    wait()后,程序会释放同步锁。

  (2)用法的不同:

    sleep()可以用时间指定来使他自动醒过来。如果时间不到你只能调用interreput()来强行打断。

    wait()可以用notify()直接唤起。

  1. Java中实现线程通信的三个方法及其作用。

1 TrainTickets tr = Thread t1 = Thread(tr,"售票点1" Thread t2 = Thread(tr,"售票点2" Thread t3 = Thread(tr,"售票点3" Thread t4 = Thread(tr,"售票点4" Thread t5 = Thread(tr,"售票点5" TrainTickets tickets = 100 ( (tickets>0 Thread.sleep(10 System.out.println(Thread.currentThread().getName()+":正在出售"+(tickets--)+"张票!" } 2. 编写两个线程,一个线程打印1-52的整数,另一个线程打印字母A- 1 2) 在打印类Printer中编写打印数字的方法print( 3) 在打印类Printer中编写打印字母的方法print( 4 5 6 index = 1 print( (index%3==0 } index++ print( (index%3!=0 } index++ NumberPrinter .p = ( i=1;i<53;i++ LetterPrinter .p = ( j='A';j<='Z';j++ Printer p = Thread t1 = Thread t2 = 1 public_3 p = Thread t1 = t1.setName("自增" Thread t2 = t2.setName("自减" j = 1 j++ System.out.println(Thread.currentThread().getName()+":j++="+ j-- System.out.println(Thread.currentThread().getName()+":j--="+ appded public_3 p = .p = ( i = 1; i < 10; i++ subtract public_3 p = .p = ( i = 1; i < 10; i++ 2 Hole h = Thread t1 = Thread(h,"秦始皇" Thread t2 = Thread(h,"刘邦" Thread t3 = Thread(h,"刘策" Thread t4 = Thread(h,"杨坚" Thread t5 = Thread(h,"李世民" Thread t6 = Thread(h,"赵匡胤" Thread t7 = Thread(h,"成吉思汗" Thread t8 = Thread(h,"朱元璋" Thread t9 = Thread(h,"康熙" Thread t10 = Thread(h,"蒋介石" Hole i=1 ( System.out.println("第"+i+"个人"+Thread.currentThread().getName()+"正在通过山洞" sleep(100 i++ } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!