第一章 多线程的技能

进程
1. 进程是资源分配和调度的基本单位。
2. 一个进程包括一个后者多个线程。比方说,QQ.exe是一个进程,里面有多个任务,可以看做多个线程。

线程

概念

继承Thread类和实现Runnable接口。Thread类实现了Runnable接口,本质是一样的。主要区别在于,实现Runnable还可以继承其他类,但是继承了Thread类却不可以,因为java不支持多继承的原因。

主要的API

如何停止线程
1. void interrupt()
执行此接口,并不能立即停止线程,只是会修改线程的状态。所有此接口后面的函数会继续执行。
2. boolean interrupted()
判断线程是否是中断状态,具有清除功能。第二次的时候就由true变成了false
3. boolean isInterrupted()
判断线程是否是中断状态,不具有清除功能·

     public static boolean interrupted(){
         return currentThread().isInterrupted(true);
     }

     public boolean isInterrupted(){
         return isInterrupted(false);
     }
    private native boolean isInterrupted(boolean flag);

以上API和sleep()使用,抛出异常。是因为sleep()方法自带抛出InterruptedException异常

public static native void sleep(long l){
    throws InterruptedException;
}

4. yield()
此方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用。但是放弃的时间又不确定,有可能刚刚放弃,又马上获取到了CPU。
5. 优先级
线程优先级最高为10,最低为1,平均默认为5。

6.守护线程
用户线程和守护线程之分,在JVM中,用户线程不存在了,那么守护线程也会自动销毁。如果至少存在一个用户线程,那么守护线程 必须存活。最典型的线程是垃圾回收(GC)线程。

public ThreadDemo extends Thread
public void test(){
    ThreadDemo threadDemo = new ThreadDemo();
    threadDemo.setDaemon(true); // 通过此API可以实现守护线程的设置。
    threadDemo.start();  // 设置守护线程一定要在start前面
}

7. 死锁

问题描述

死锁问题的描述:
线程A和线程B ,资源1和资源2,如果线程A占用资源1,请求资源2。线程B占用资源2,请求资源1。 这样就形成了一个环状的链路,并且每个线程各自不释放自己已经占用的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值