第九章作业

来源:互联网 发布:linux操作系统入门 编辑:程序博客网 时间:2024/05/19 13:55
1.    一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块
内存空间、一组系统资源,每一个进程的内部数据和状态都是完全独立的。

     Java程序执行中的单个顺序的流控制称为线程,多线程则指一个进程中可

以同时运行多个不同的线程,执行不同的任务。

2.

java线程分为前台线程(也称用户线程或普通线程)和后台线程(Daemon thread)。

     后台线程会随着主线程(main线程)的结束而结束,但是前台进程则不会(如果main线程先于前台进程结束,前台进程仍然会执行);或者说,只要有一个前台线程未退出,进程就不会终止。

     默认情况下,程序员创建的线程是用户线程;用setDaemon(true)可以设置线程为后台线程;而用isDaemon( )则可以判断一个线程是前台线程还是后台线程;

     jvm的垃圾回收器其实就是一个后台线程;

     setDaemon函数必须在start函数之前设定,否则会抛出IllegalThreadStateException异常;

 3.

两种

方式一:直接继承线程Thread类。该方法编写简单,可以直接操作线程,由于已经继承了Thread,不能再继承其他类了。

方式二:实现Runnable接口。当一个类已继承了另一个类时,就只能用实现Runnable接口的方式来创建线程;另外,使用此方法的更多原因是多个线程共享某个对象的资源。
4.

创建,就绪, 运行, 阻塞, 死亡。

start(), wait(), sleep(), join(), yield()

5.

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

多线程同时访问共享资源(变量),导致线程安全问题。

采用加锁机制, 加入线程同步的技术。

synchronized 代码块:监视器就是指定的对象。
synchronized 方法:监视器就是this对象。
synchronized 静态方法:监视器就是相应的Class对象。

6.

线程之间需要一些协调通信,来共同完成一件任务。

使用wait和notifyAll实现线程间同步通信 。

7.

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

8.

class Dummy implements Runnable{private int count = 0;public void A() {System.out.println(Thread.currentThread().getName() + "  A");synchronized (this) {System.out.println(Thread.currentThread().getName() + "  A  " + count++);}}public synchronized void B() {System.out.println(Thread.currentThread().getName() + "  B  " + count++);}@Overridepublic void run() {while(count < 100) {A();B();}}}public class Test {public static void main(String[] args) {Dummy d = new Dummy();Thread t1 = new Thread(d);Thread t2 = new Thread(d);t1.start();t2.start();}}
9.

class Dummy_1 implements Runnable {public static boolean flag = true; @Overridepublic void run() {while(flag) {System.out.println("i am dummy_1");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Dummy_2 implements Runnable {@Overridepublic void run() {Dummy_1.flag = false;System.out.println("i am dummy_2");}}public class Test {public static void main(String[] args) {new Thread(new Dummy_1()).start();try {Thread.sleep(10000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}new Thread(new Dummy_2()).start();System.out.println("main over");}}






原创粉丝点击