线程总结大全

来源:互联网 发布:vue node sass 编辑:程序博客网 时间:2024/06/04 09:01

线程
java中的类Thread开启一个线程:
查看API
创建新执行线程有两种方法。一种方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。例如,计算大于某一规定值的质数的线程可以写成:

面试题:为什么重写run方法run方法里面是需要多线程执行的代码run方法是不能开启线程的,仅仅是执行人家的代码。面试题:start()和rn()方法start()是开启线程,使线程处于就绪状态run():调用仅仅是普通方法的调用,没有开启一个新线程同一个线程只能开启一次,多次开启报错:IllegalThreadStateException

Thread类的方法:
String getName()返回该线程的名称。
static Thread currentThread():返回对当前正在执行的线程对象的引用。我觉得就是主线程
int getPriority() 返回线程的优先级。
void setPriority(int newPriority) 更改线程的优先级。
线程休眠:static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。
线程加入: void join() 等待该线程终止。
守护线程: void setDaemon(boolean on) 将该线程标记为守护线程或用户线程。 当只剩下守护线程时jvm将终止
礼让线程:static void yield() 暂停当前正在执行的线程对象,并执行其他线程。
终止线程: void stop(Throwable obj) 已过时。 强制终止线程。
中断线程: void interrupt() 中断线程。

例如:Thread.currentThread().setName("主线程");System.out.println(Thread.currentThread().getName()); td1.start();td1.join();td2.start();td3.start();Thread.currentThread().setName("主线程");System.out.println(Thread.currentThread().getName());Thread(String name) 分配新的 Thread 对象。

1.分时调度模型:每个线程轮流使用cpu
2.抢占式调度模型:根据优先级级别进行调度√

java采用的是挑战式调度模型:
优先级:默认是5
java.lang.Thread
public static final int MAX_PRIORITY 10
public static final int MIN_PRIORITY 1
public static final int NORM_PRIORITY 5


public void run() {    System.out.println("开始执行");    try {        Thread.sleep(1000);    } catch (InterruptedException e) {        e.printStackTrace();    }    System.out.println("结束执行");}

    td1.start();    Thread.sleep(300);    td1.interrupt();    td1.stop();

stop()是立即终止线程、td1.interrupt()不会立即终止

线程的生命周期:
1.创建线程:创建线程对象
2.就绪状态:有执行权,没有执行时间片。没有资源服务
3.运行状态
阻塞:运行到中止(sleep)没有执行权
唤醒:中止到就绪状态,有执行权
4.死亡:终止线程状态

线程的第二种创建方式:实现接口 Runnable

5.两种创建线程的方法区别:
继承Thread:对于共享变量必须设置static实现
实现接口Runnable: