多线程 线程的实现方式 线程的三种实现方式 线程的常用方法 线程的状态描述

目录

 

多线程就是多条执行路径同时执行。

线程的实现方式:

extends Thread

implements Runnable

通过线程池的方式实现(线程池也是同这两种方式实现的)

通过箭头函数实现

线程状态:

1.新建 (比如说一个类 TT 继承一个 Thread ,在new TT的时候就是创建)

2.运行(执行中又包含:就绪、执行、睡眠、等待、离开、阻塞、唤醒)

3.结束 (teminated 结束了,就不可以在start了)


多线程就是多条执行路径同时执行。

线程的实现方式:

extends Thread

implements Runnable

通过线程池的方式实现(线程池也是同这两种方式实现的)

通过箭头函数实现


 

实现了线程,我们就开始使用线程。使用前我们需要了解线程的状态

线程状态:

1.新建 (比如说一个类 TT 继承一个 Thread ,在new TT的时候就是创建)

public class TT extends Thread {
​
    @Override
    public void run(){
        System.out.println(" tt run ");
    }
}

Thread t = new TT() 就是线程的新建

2.运行(执行中又包含:就绪、执行、睡眠、等待、离开、阻塞、唤醒)

t.start() :运行(runnable)就是把这个线程扔到CPU的等待队列里去,在运行时有分 就绪(ready)与执行(running)。在CPU的等待队列时就是 ready,当时CPU的调度调到这个线程工作的时候就是running。

当CPU的执行的这个线程(t)的时候,CPU的调度又去执行别的线程了,就会 把这个线程(t)仍回到CPU的调度队列中去,这个时候线程是挂起状态(yiled)。

在ready 与running 的之间又有好多状态变化。

sleep()这个方法的意思就是在线程执行的时候,当前睡一下,等到了时间在执行。在括号中设置休息时间,是毫秒

wait()这个方法的意思就是在线程执行时,我等会儿再行。在括号中设置休息时间,是毫秒

join() 这个方法的意思离开当前线程,执行完另一个线程,回来在执行这个线程。


锁池:假如该线程A拥有某个对象(不是类)的锁,而且其它线程需要需要调用这个对象的synchronized的方法,由于这个线程进入synchronized方法的时候,需要获取该对象锁的拥有权,但是该对象的锁的拥有权在线程A,所以这线程进入到该对象的锁池中。

等待池:假如一个线程A调用了wait()方法,同时线程A释放锁资源,同时线程A进入到这个对象的等待池中,假如一个线程调用相同对象的notify()方法,会在该对象的等待池中随机唤醒一个线程,进入到该对象的锁池中,如果调用的是notifyAll()方法,会把该对象等待池中 的所有线程放到该对象的锁池中,等待进行锁的竞争。

notify():简单理解就是随机唤醒一个

notify():唤醒全等待的线程。

3.结束 (teminated 结束了,就不可以在start了)

Guess you like

Origin blog.csdn.net/yu1xue1fei/article/details/114529281