1.填空题
(1)一个进程就是一个执行中的 ,而每一个进程都有自己独立的一块
和 。
(2)同类的多个线程是 一块内存空间和一组系统资源,而线程本身的数据通常只有微处理器的寄存器数据,以及一个供程序执行时使用的堆栈。
(3)Java的线程是通过Java的软件包java.lang中定义的 类来实现的。
(4)一个线程从创建到消亡的整个生命周期中,总是处于下面5个状态中的某个状态:
、 、 、 和 。
(5)Java使用 关键字控制对共享信息的并发访问,实现线程同步。
2.选择题
(1)创建Thread对象后,在启动这个线程之前,这个线程处于创建状态,它仅仅是一个空的线程对象,系统不为它分配资源。处于这种状态时只能 该线程,调用其他方法都会失败并且会引起非法状态处理。
A.运行 B.启动或终止 C.终止 D.阻塞
(2)Thread类提供了一个静态方法 可以用于返回正在运行的线程体引用。
A.currentThread( ) B.activeCount( )
C.enumerate( ) D.current( )
(3)下列关于进程的描述正确的是 。
A.一个进程就是一个执行中的程序,所有进程共享系统的内存空间和资源
B.系统在产生一个进程或者在各个进程之间切换时,负担要比线程小得多
C.进程或线程之间不需要进行数据交换
D.系统中线程个数比进程个数多得多
(4)线程已获得某个对象的锁,若该线程调用 方法,则退出所占用的处理器,打开该对象的锁,转为阻塞状态,并允许其他同步语句获得对象锁。
A.notify( ) B.notifyAll( ) C.wait( ) D.start( )
(5)下面关于死锁的描述,不正确的是 。
A.使用Java 线程的同步不会导致死锁现象
B.线程间因为相互等待对方的资源而不能继续执行的情况称为死锁
C.持有一个锁并试图获取另一个锁时,就有死锁的危险
D.死锁是由资源的无序使用而带来的
3.问答题
(1)Java为什么要引入线程机制?线程、进程和程序之间的关系是怎样的?
(2)创建线程的两种方法是什么?
(3)什么是死锁?
(4)多线程技术与进程技术相比有什么优越性?
4.上机操作题
(1)实现读者-写者问题的同步。问题描述如下:对共享资源的读/写操作;任一时刻写者最多只允许一个,而读者则允许多个;读和写不能同时进行,而多个读者同时读则是允许的。
(2)设有五位哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。但是,但是桌子上总共只有5支筷子,在每人两边各放一支。哲学家们在饥饿是才试图分两次从两边拾起筷子就餐。
①哲学家要有两支筷子才能就餐。
②如果筷子已在其他人手上,则该哲学家就要等到他人吃完后才拿筷子。
③任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子。
④最多4个人可以去拿其左边的筷子
⑤拿齐2支筷子后才能进餐
⑥奇数哲学家先拿左边筷子,偶数哲学家先拿右边的筷子
要求至少有一位哲学家能吃到饭,也就是不要让哲学家们都吃不到饭,全部饿死。