Java线程学习笔记(一)

本文详细介绍了Java中多线程的创建与启动,包括通过继承Thread类和实现Runnable接口两种方式。讨论了线程的异步执行以及线程优先级的控制,强调了实现接口方式的优势在于避免单继承限制和资源共享。同时,提到了Thread类的重要方法如start()、run()、getName()等,并展示了线程优先级的获取与设置。
摘要由CSDN通过智能技术生成

线程

进程:计算机cpu核心数,一个核心只能同时处理一个进程
主频:调度进程,越高越快
线程:一个核心内处理进程是可能是多条并行处理,这里面的一条就叫线程
多线程:多线程是进程的支流,当分支过后,就互不相干,假设在进程上跑的代码是主程序,当其中的第三行代码是开启线程的,那么开启线程之后线程运行的代码就是与主程序并行(他们之间就互不相干了)

1.多线程的创建与启动

它们通过java.lang.Thread类来实现
run()方法:想要在开启的多线程中运行的代码逻辑就写在run方法里。
start()方法:用来启动线程,本质上就开始运行run方法。
多线程的异步:是指在主程序中启用多线程,后续的程序都是并行,所以会交叉输出,异步是相对于t.start来说的。

1.1通过继承Thread类来实现多线程

代码

public class TestThread extends Thread {
    @Override
    public void run() {
        System.out.println("多线程运行的代码");
        for (int i = 0; i < 5; i++) {
            System.out.println("多线程:" + i);
        }
    }
}

public class Test {
    public static void main(String[] args) {
        //通过继承Thread来开启线程
        Thread t = new TestThread();
        t.start();//开启线程
        System.out.println("============================");
        System.out.println("============================");
        System.out.println("============================");
    }
}


1.2通过Runnable接口来实现多线程

1)定义子类,实现Runnable接口

2)子类中重写Runnable接口中的run方法

3)通过Thread类含参构造器创建线程对象

4)将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法中

5)调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法

代码

public class TestRunnable implements Runnable {
    @Override
    public void run() {
        //Thread.currentThread().getName()获取当前线程的名称
        System.out.println(Thread.currentThread().getName() + "Runnable多线程多线程运行的代码");
        for (int i = 0; i < 5; i++) {
            System.out.println("Runnable多线程:" + i);
        }
    }
}

public class Test {
    public static void main(String[] args) {
        
        Thread t1 = new Thread(new TestRunnable());//通过Runnable来实现
        t1.start();

        Thread t2 = new Thread(new TestRunnable(), "t-2");//通过Runnable来实现,该线程命名为t-2
        t2.start();
    }
}

2.继承方式和实现方式的联系与区别

【区别】

继承Thread: 线程代码存放在Thread子类run方法中。

实现Runnable: 线程代码存放在接口的子类run方法中。

【实现接口方式的好处】

1)避免了单继承的局限性

2)多个线程可以共享同一个接口实现类的对象,非常是和多个相同进程来处理同一份资源

一般使用实现接口的方式来实现多线程

3.Thread类的相关方法

void start();启动线程,并执行对象的run()方法

run():线程在被调度时执行的操作

String getName():返回线程名

void setName(String name):设置该线程名称

static currentThread():返回当前线程

代码

package 线程;

public class Test1 {
    public static void main(String[] args) {
        TestRun run0 = new TestRun();
        TestRun run1 = new TestRun();//多态,实现类实例化

        Thread t0 = new Thread(run0);//定义线程
        Thread t1 = new Thread(run1, "t-1");
        t0.setName("t-0");//修改t0线程名称
        System.out.println(t0.getName());
        System.out.println(t1.getName());

        t0.start();
        t1.start();

        System.out.println("============================");
        System.out.println("============================");
        System.out.println("============================");
    }
}

class TestRun implements Runnable {
    int count = 0;

    @Override
    public void run() {
        for (int i = 0; i < 5; i++) {
            count++;
            System.out.println("TestRun多线程:" + count);
        }
    }
}

4.线程优先级控制

MAX_PRIOORITY (10);

MIN_PRIOORITY (1);

NORM_PRIOORITY (5);

涉及的方法

getPriority(): 返回线程优先值(如果没有设置,默认是5)

//测试
TestRun run0 = new TestRun();
Thread t0 = new Thread(run0);//定义线程
System.out.println("t0的优先级为:" + t0.getPriority());

setPriorit(int newPriority) :改变线程的优先级

优先级只是说哪一个进程有较大的概率被执行

优先级是用数组1-10表示,数字越大优先级越高,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LvhaoIT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值