进程:程序的基本执行实体

线程:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中实际运作的单位。简单理解:应用软件中互相独立,可以同时运行的功能

线程并发和并行的概念:

并发:在同一时刻,有多个指令在单个cpu上交替执行

并行:在同一时刻,有多个指令在多个cpu上同时执行

多线程的实现方式:

多线程第一种实现方式:继承Thread类的方式进行实现

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

这里需要注意的是:这种方式呢,需要利用Thread的静态方法currentThread,这个方法是可以查看执行到当前这段代码是哪个进程。

因为前面两种方式都是重写run方法,都是没有返回值

多线程第三种实现方式:利用Callable接口和Future接口方式实现call方法,这个方法可以通过Callable的泛型来返回具体的返回值

Thread中的成员方法:

package Day14_thread;

public class ThreadTest04 {
    public static void main(String[] args) {
        //getName
        //如果我们没有设置进程的名称,那么这个进程的名称格式如下
        //Thread-序号,这个序号是从0开始的
        MyThread04 mt1 = new MyThread04();
        MyThread04 mt2 = new MyThread04();
        //设置进程名称方法:setName/Thread构造方法
        //setName:设置进程名称,其实也可以用Thread的构造方法来
        //设置名称
        mt1.setName("进程1");
        MyThread04 mt3 = new MyThread04("进程3");
        mt1.start();
        mt2.start();
        mt3.start();
        //currentThread:
        //当JVM虚拟机启动之后,会自动启动多条线程,其中有一条就是
        //main线程,这个线程的作用就是调用main方法,执行里面的代码
        //线程休眠:sleep
        //细节1;哪个线程执行到这个方法,哪个线程就会在这里停留
        //对应的时间
        //细节2:方法的参数,表示休眠的时间,单位毫秒
        //3、当时间到了之后,线程会自动醒来,继续执行下面的代码
    }
}

设置线程的优先级:setPriority

获取线程的优先级:getPriority

java线程的调度是抢占式调度,随机性。优先级越高,抢占到资源的概率就越高

如果没有给线程设置优先级,线程的优先级默认值是5,

如果给线程设置优先级是1和10,从结果看,线程2就会更快抢占资源

设置守护线程:setDaemon,参数是boolean类型的

注意看下面,线程2只打印了3,4后面的就不打印了,是因为,虚拟机检测到线程1已经结束了,所以就会陆续终止线程2了。需要注意的是,守护线程并不是代表一定就是非守护线程执行完之后,守护线程才开始执行

出让/礼让线程:了解

礼让线程/出让线程:yield()

插入线程:join

该线程调用join方法,就可以插入先执行

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐