}
答:红色、顺时针画圆
7.4 多媒体基础
简单应用:播放幻灯片、动画、音乐的方法
1010-7.小程序要播放音频文件,可使用类( ) A.Audio B.Jaudio C.AudioClip
D.JaudioClip
17.在Java语言中,要播放音频文件可以使用__________类。
1101-24.请写出java.applet.AudioClip控制声音播放的三个方法。 Loop();stop();play()
第八章 多线程
8.1 线程的基本概念
识记:线程与进程的区别,线程的各种状态、优先级,线程间的互斥与同步 1210-8. 阻塞状态的线程在消除引起阻塞的原因后,会转入 A. 死亡状态 B. 开始状态C. 就绪状态 D. 运行状态
18.线程从阻塞状态恢复到就绪状态,有三种途径:自动恢复、用resume()方法恢复和用_________方法恢复。notify()或notifyAll()
18.当线程调用resume()方法后,就进入__________状态。
1201-18.多线程程序设计中,让执行临界段程序时等待的线程结束等待,通常使用的方法有resume()、notify()或者 notifyAll() 。
1001-18.当线程使用完临界段后,为了使等待的线程恢复工作,需要调用的方法是__________。Notify()
1110-18.在Java中,线程的调度策略采用___抢占式____,优先级高的线程比优先级低的优先执行。
8.在以下四个供选的整数中,能作为线程最高优先级的整数是 ( C ) A.0 B.1 C.10 D.11
1404-8.以下能作为表示线程优先级的数值,并且级别最低的是
A.0 B.1 C.1 5
D.1 6
1010-8.以下是关于线程的叙述,正确的是( )
A.多线程的使用可以提高设备的平行工作能力,但是使系统管理变得复杂
B.同一个进程下的线程都有自己的状态、专用数据段和独立的内存资源 C.线程是能独立运行的程序
D.进程的执行效率比线程的执行效率高
1101-8.以下关于线程互斥和同步的叙述中,正确的是( ) A.多线程互斥使用各自资源的程序段,在操作系统中称为临界段 B.临界段的作用是使某线程能够使用其它线程的资源 C.可以使用notify()方法通知等待线程结束等待 D.线程的互斥和同步可以很好地解决死锁问题
1101-18.当线程处于新建状态后,调用了start()方法,该线程就处于___就绪__状态。 1110-8.设Thread对象thd的优先级为7,thd又创建了另一个Thread对象chd,如果未对chd 的优先级进行修改,则chd的优先级为 ( )? A.1 B. 5? C.7 D. 10?
8.2 Thread类和Runnable接口
综合应用:用Thread子类实现多线程,用Runnable接口实现多线程 8.用Thread子类实现多线程的步骤顺序是( )
A.声明Thread类的子类,创建Thread子类的实例,让线程调用start()方法
B.声明Thread类的子类,在子类中重新定义run()方法,创建Thread子类的实例 C.创建Thread子类的实例,让线程调用start()方法
D.声明Thread类的子类,在子类中重新定义run()方法,创建Thread子类的实例,让线程调用start()方法
18.程序员用Java语言编写多线程应用程序,程序员能控制的关键性工作有两个方面:一是编写线程的_________方法;二是建立线程实例。run()
8.用Runnable接口实现多线程的主要工作是( )
A.声明实现Runnable接口的类,在类内实现run()方法,让线程调用start()方法。 B.声明实现Runnable接口的类,在类内实现run()方法,在类内声明线程对象,在init()方法中创建新线程,启动新线程。
C.声明实现Runnable接口的类,在类内实现run()方法,在类内声明线程对象,在Init()方法或start()方法中创建新线程,在start()方法中启动新线程。
D.声明实现Runnable接口的类,在类内实现run()方法,在init()方法中创建新线程,在start()方法中启动新线程。
8.在以下供选择的方法中,能让线程从阻塞状态恢复到就绪状态的方法是( ) A.start() B.init() C.resume() D.run() 1010-25.请写出用Runnable接口实现多线程的主要工作。 1110-25.请写出线程从阻塞状态恢复到就绪状态的三种途径。
8.3 线程互斥和同步
识记: 线程间的互斥与同步
简单应用: 线程互斥和同步的实现方法
1010-18.多线程互斥使用______的程序段,在操作系统中称为临界段。共享资源 8.用来定义临界段,能对共享对象的操作上锁的关键字是
A.static B.share C.serialize D.synchronized 1201-8.以下关于线程互斥和同步的叙述中,正确的是( ) A.临界段是线程互斥使用资源的程序段 B.临界段能使线程使用其它线程的资源 C.互斥和同步能很好地解决死锁问题 D.可用notify()方法让等待线程结束等待 1210-18. 线程之间的相互等待被称为线程的____同步______。 1404-18.当线程进入临界段后,发现需要与别的线程进行同步,则要调用的方法 是 ______。 Wait()
31.以下定义的类shareDataManager用于管理多个线程共享数据data。一些线程要减少data,另一些线程要增加data。由于data不可以是负值,修改data的方法对这些线程来说不仅要互斥,还要同步。类提供一个方法modiData()供修改data的线程调用,该方法在data修改结束后,应通知其它等待进入这个方法的线程。 class ShareDataManager{ int data=0;
________void modiData(int delta){ 在Java语言中,使用关键字synchronized定义临if(delta>=0){
界段,能对共享对象的操作上锁,使得某一时刻data+=delta;
只允许一个线程使用这个共享对象。但是为了同}else {
while(data <delta){ 步,可在临界段中使用wait()、notify()和try{System.out.println("发生等待!"); notifyAll()方法。wait()让线程一直等待,notify()wait();
方法通知第一个处于等待的线程结束等待。}catch(InterruptedException e){ }
notifyAll()方法使所有处于等待的线程都结束等}
data-=delta; 待,重新竞争CPU。 }
_________; }
ShareDataManager(int ititData){data=initData;} }
36.小应用程序创建一个线程。例子使用容器类方法getGraphics()获得Graphics对象,给线程作为画笔使用。请写出该程序中这个线程的工作内容。 import java.applet.*;import java.awt.*;
public class Class1 extends java.applet.Applet implements Runnable{ Thread redBall;Graphics redPen; int rx=0,ry=0; public void init(){ setSize(250,200);
redBall =new Thread(this); redPen=getGraphics();
redPen. setColor(Color.red); setBackground(Color.gray); }
public void start(){ redBall.start(); } public void run(){ while(true){
if(Thread.currentThread()==redBall){ rx=(int)(80*Math.random()); ry=(int)(80*Math.random()); red Pen.setColor(Color.red);
red Pen.fillOval(100+rx,100+ry,10,10); try{redBall.sleep(500);}
catch(InterruptedException e){} redPen.setColor(Color.gray);
redPen.fillOval(100+rx,100+ry,10,10); } } } }
参考答案:随机位置显示一个小圆,程序采用背景色重画的办法,清除前一次显示的小圆。 本题考核知识点是图形绘制和线程31.以下定义的类ShareData用于管理多个线程共享数据val。为了保证对共享数据val修改的完整性,线程对val的操作需要互斥,类ShareData中定义的方法modiData()就是供共享val的线程修改val的方法。程序共有20个线程共享val,有些减少val,有些增加val。
public class Class1 {
public static void main(String args[]){ ShareData mrc = new ShareData(50); Thread[] aThreadArray = new Thread[20];
System.out.println(\刚开始的值是:\ System.out.println(\多个线程正在工作,请稍等!\ for(int i = 0; i < 20; i++) { int d = i % 2 == 0 ? 50 : -30;
aThreadArray[i] = new Thread(new MyMultiThreadClass(mrc, d)); aThreadArray[i].start(); }
WhileLoop ://等待所有线程结束 while(true){
for(int i = 0; i < 20; i++)
if(aThreadArray[i]. isAlive() ___)continue WhileLoop; break; }
System.out.println(\最后的结果是: \}
}
class MyMultiThreadClass implements Runnable { ShareData UseInteger; int delta;
MyMultiThreadClass(ShareData mrc, int d) { UseInteger = mrc; delta = d; }
public void run() {
for(int i = 0; i < 1000; i++) { UseInteger.modiData(delta);
try {Thread.sleep(10) ;//做一些其他的处理 }catch(InterruptedException e){ } } } }
class ShareData { int val;
ShareData(int initValue){val = initValue; } int getVal(){return val;}
private void putVal(int v){val = v;}
_________ void modiData(int d){ synchronized putVal(getVal() + d); } }
1001-31.以下定义的类ShareData用于管理多个线程共享数据data。一个线程生成data,另一个线程使用data。约定,新生成的data只有被另一个线程使用后,才能生成下一个data。反之,一个data被使用后,也不能再继续使用。所以,生成和使用data的线程之间需要互斥和同步。以下是管理上述使用方式的类,类内有要管理的共享数据,以及对共享数据的存操作putData()和取操作getData()。 class ShareData{
int data;∥共享数据