第12章 多线程

一、填空题

1.实现多线程的两种方式是继承Thread类和实现Runnable接口。

2.线程的整个生命周期分为5个阶段,分别是新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态和死亡状态。

3.在Thread类中,提供了一个start()方法用于启动新线程。

4.执行sleep()方法,可以让线程在规定的时间内休眠。

5.同步代码块使用synchronized关键字来修饰。

二、判断题

1.对Java程序来说,只要还有一个前台线程在运行,这个进程就不会结束

2使用synchronized关键字修饰的代码块,被称作同步代码块。

3操作系统中的每一个进程中都至少存在一个线程。

4线程结束等待或者阻塞状态后,会进入运行状态。

5当调用一个正在运行线程的stop()方法时,该线程便会进入休眠状态。

三、选择题

1.下列有关线程的创建方式说法错误的是(C )

A、通过继承Thread类与实现Runnable接口都可以创建多线程程序

B、实现Runnable接口相对于继承Thread类来说,可以避免由于Java的单继承带来的局限性

C、通过继承Thread类与实现Runnable接口创建多线程这两种方式没有区别

D、大部分的多线程应用都会采用实现Runnable接口方式创建

2.以下哪种原因不会导致线程暂停运行(B)

A、等待     B、阻塞      C、休眠      D、挂起及由于I/O操作而阻塞

3.以下关于计算机中,线程调度模型的说法错误的是 B )

A、在计算机中,线程调度有两种模型,分别是分时调度模型和抢占式调度模型

B、Java虚拟机默认采用分时调度模型

C、分时调度模型是指让所有的线程轮流获得CPU的使用权

D、抢占式调度模型是指让可运行池中优先级高的线程优先占用CPU

4.Java多线程中,关于解决死锁的方法说法错误的是( D )

A、避免存在一个进程等待序列{P1,P2,…,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,…...,而Pn等待P1所占有的的某一资源,可以避免死锁

B、打破互斥条件,即允许进程同时访问某些资源,可以预防死锁,但是,有的资源是不允许被同时访问的,所以这种办法并无实用价值

C、打破不可抢占条件。即允许进程强行从占有者那里夺取某些资源。就是说,当一个进程已占有了某些资源,它又申请新的资源,但不能立即被满足时,它必须释放所占有的全部资源,以后再重新申请。它所释放的资源可以分配给其它进程。这样可以避免死锁

D、使用打破循环等待条件(避免第一个线程等待其它线程,后者又在等待第一个线程)的方法不能避免线程死锁

5.对于线程的生命周期,下面四种说法正确的有哪些? (多选)( BC)

A.调用了线程的start()方法,该线程就进运行状态

B.线程的run()方法运行结束或被未catch的InterruptedException 等异常终结,那么该线程进死亡状态

C.线程进死亡状态,但是该线程对象仍然是一个Thread对象,在没有被垃圾回收器回收之前仍可以像引用其他对象一样引用它

D.线程进死亡状态后,调用它的start()方法仍然可以重新启动

四、简答题

1.简述创建多线程的两种方式。

一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。

new Thread() {

    public void run(){}

}.start();

另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。

class MyThread implements Runnable{

public void run(){}

}

2.简述同步代码块的作用。

同步代码块的作用是控制线程,保证同步代码块中只能有一个线程在运行,保证了多线程操作数据的安全性。

五、编程题

1. 编写一个多线程程序,模拟火车售票窗口售票的功能。创建线程1和线程2,通过这两个线程共同售出100张票。

 public class Example {
     public static void main(String[] args) {
         TicketWindow tw = new TicketWindow();
        new Thread(tw, "线程1").start();
         new Thread(tw, "线程2").start();
     }
 }
 class TicketWindow implements Runnable {
     private int num = 100;
     public void run() {
         while (num > 0) {
             Thread th = Thread.currentThread();
             String th_name = th.getName();
            System.out.println(th_name + " 正在发售第 " + num-- + " 张票 ");
         }
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值