面向对象技术书面作业8 (GUI +多线程)
1.进行GUI程序设计的步骤有哪些?各有什么样的功能。
(1)引用需要的包和类。
(2)设置一个顶层的容器。
(3)根据需要为容器设置布局管理器或使用默认布局管理器。
(4)将组件添加到容器内,位置自行设计。
(5)为响应事件的组件编写事件处理代码
2.GUI中panel的默认布局管理器是什么?
FlowLayout
3.什么是线程?创建线程的两种方法分别是什么?
一个应用是一个进程,一个用户就是一个线程
public class Test1 {
public static void main(String[] args) {
Thread thread1 = new MyThread1();
Thread thread2 = new Thread(new MyThread2());
thread1.setName(“线程一”);
thread2.setName(“线程二”);
thread1.start();
thread2.start();
}
}
class MyThread1 extends Thread{
public void run(){
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " ----> " + i);
}
}
}
class MyThread2 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + " ----> " + i);
}
}
}
4.叙述线程的生命周期的各个阶段及功能?
新建状态:就是刚new出来的线程对象
就绪状态(可运行状态):表示当前线程就有抢夺CPU时间片的权利,当一个线程抢到CPU时间片之后就会开始执行其对应的run方法,run方法的执行标志线程进入了运行状态
运行状态:run方法的执行标志了线程进入了运行状态,当占用的CPU时间片被用完之后会重新进入就绪状态去抢占CPU时 间片,当重新抢到CPU时间片之后会接着上一次的代码继续往下执行
死亡状态:当run方法执行完毕之后,线程就进入了死亡状态
阻塞状态:当线程遇到了阻塞状态,例如sleep方法,接受用户键盘输入等就会进入阻塞状态,此时会将占用的CPU时间片释放,当阻塞状态解除后,会进入就绪状态,重新争夺CPU时间片
锁池lockpool:在运行状态如果遇到对应synchronized锁,那么就会进入锁池,进入之后就会寻找对应的锁,如果找到了就会回到就绪状态,如果没找到就会在锁池中等待
5.什么是线程同步?线程同步的作用是什么?如何实现线程的同步?
线程同步:线程同步就是几个线程分先后执行,两个线程之间发生了等待关系,这就是同步编程模型
线程同步的作用:数据在多线程并发的情况下仍能安全
线程同步:synchronized关键字
6.运行下面的程序,写出一个可能的运行结果。
public class Exam_2 {
public static void main(String args[ ]) {
Bank bank=new Bank();
bank.setMoney(300);
Thread threadOne,threadTwo;
threadOne=new Thread(bank); //runnable对象作为参数
threadOne.setName(“One”);
threadTwo=new Thread(bank);
//threadTwo和threadOne的目标对象相同
threadTwo.setName(“Two”);
threadOne.start();
threadTwo.start();
}
}
public class Bank implements Runnable {
private int number=0;
public void setMoney(int m) {
number=m;
}
public void run() { //重写Runnable接口中的方法
while(true) {
String name=Thread.currentThread().getName();
if(name.equals(“One”)) {
if(number<=160) {
System.out.println(name+“进入死亡状态”);
return; // threadOne的run方法结束
}
number=number+10;
System.out.println(“我是”+name+“现在number=”+number);
}
if(Thread.currentThread().getName().equals(“Two”)) {
if(number<=0) {
System.out.println(name+“进入死亡状态”);
return; // threadTwo的run方法结束
}
number=number-100;
System.out.println(“我是”+name+“现在number=”+number);
}
try{ Thread.sleep(800);
}
catch(InterruptedException e){}
}
}
}
我是One现在number=310
我是Two现在number=210
我是One现在number=220
我是Two现在number=120
我是Two现在number=20
One进入死亡状态
我是Two现在number=-80
Two进入死亡状态