线程与进程02

来源:互联网 发布:mac终端输入不了密码 编辑:程序博客网 时间:2024/04/29 09:57

线程与进程:

1. 一个应用程序生成一个进程, 但一个进程可以产生多个线程

2. 进程间通信非常麻烦, 但线程非常方便,线程之间通信使用通知机制,可以进行通信

3. 进程独享资源, 线程共享它所属的进程的资源

4. 进程结束,则这个进程所产生的线程也会销毁


java中线程的处理方式

1. 继承Thread类(外部类,匿名内部类)

class 子类名 extends Thread{
    public void run(){
        //这个新线程要执行的代码
    }
}

2. 实现Runnable接口

线程的主要任务是处理耗时的操作.


线程的分类

1.主线程

2.精灵线程(又叫守护线程)setDaemon(true)  其它线程运行完成,则精灵线程也over  一般精灵线程使用在垃圾处理上

3.子线程

线程的属性

id name  priority  -> 优先级(1-10)  ThreadGroup 线程组

如何控制Thread的运行

1.睡眠

静态方法.   Thread.sleep()
 有可能有异常.   try{}catch(){}
 睡眠后,线程会进入阻塞  -> 就绪状态  ->  cpu.

2.优先级


3.join

在一个线程中调用另一个线程的join(),则当前线程阻塞,让另一个线程先执行后,当前才执行.   根优先级无关.

4.yield

yield与sleep的区别:
 sleep给其它线程运行的机会,但不考虑其它线程的优先级;但yield只会让位给相同或更高优先级的线程;
sleep有异常, yield没有
当线程执行了sleep方法后,将转到阻塞状态,而执行了yield方法之后,则转到就绪状态;

5.synchronized(解决多线程操作一个资源时的数据不一致的问题.)

用法(使用在代码块上面或者使用在某一个方法上)


死锁

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

死锁产生的四个条件(这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
一不满足,就不会发生死锁)

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。


生产者消费者(未完待续。。)

0 0