每日一题----------多线程和并发

总结:

两种方式;

(1)继承Thread 类。(由于java是单继承,当该类没有继承其他类时,可以选择继承Thread类)

(2)实现Runnable接口。(当该类继承了其他类,不能继承Thread类时,可以选择实现接口)

1.实现接口的方式 创建一个T1类,来继承Runnable接口,重写run()方法。

java 复制代码
class T1 implements Runnable {
    int count = 0;
    public void run() {
        while (true) {
            System.out.println("count t1: " + (count++));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            if (count == 10) {
                break;
            }
        }
    }
}

讲解代码:

Thread.sleep(1000); ------>代表休眠1000毫秒,也就是1秒的时间,当调用sleep的时候,必须抛出一个异常,可以使用try - catch 捕获异常,也可以将异常抛给该类。

2.在主线程中,创建子线程,也就是由T1这个类创建。

java 复制代码
    public static void main(String[] args) {
        T1 t1 = new T1();
        Thread thread1 = new Thread(t1);
        thread1.start();
    }

代码讲解:

首先创建一个T1类的对象,然后将该对象,扔给Thread类中,来实现子线程,由于Thread类是实现了Runnable接口,所有T1也是可以实现这个接口,重写run()方法,然后来由Thread类来调用方法,启动子线程。

thread1.start();就是调用线程,让线程启动。

关于继承方式:

1.创建一个类,直接继承Thread类,来实现Runnable接口。重写run()方法

java 复制代码
class cat extends Thread {
    public void run() {
        int time = 0;
       while (true) {
           try{
               for (int i = 0; i <80 ; i++) {
                   //线程睡眠一会 毫秒级别
                   Thread.sleep(1000);
                   System.out.println("123");
               }
           }catch(Exception e){
               System.out.println("123");
           }
       }
    }
}

2.可以直接创建一个该类对象,调用线程,相比于实现接口的方式,更方便调用,可以对比一下

java 复制代码
public static void main(String[] args) {
        cat cat = new cat();
        cat.start();
}

直接可以使用该对象直接调用cat.start()子线程。

关于线程的一些其他方法(线程礼让和插队)

相比较yield和join方法,这个是线程插队,一旦插队成功,必须执行完,然后其他线程才继续执行,而不是两个线程一起执行。

代码:

java 复制代码
public class thread {
    public static void main(String[] args) {
        cat cat = new cat();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(1000);
                if (i == 5 ){
                    cat.start();
                    cat.join();

                }
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            System.out.println("主线程正在执行..."+ i);
        }
    }
}
class cat extends Thread {
    public void run() {
        int time = 0;
        boolean loop = true;
       while (loop) {
           try{
               for (int i = 0; i <10 ; i++) {
                   //线程睡眠一会 毫秒级别
                   Thread.sleep(1000);
                   System.out.println("cat正在执行..." + i);
               }
               loop = false;
           }catch(Exception e){
               System.out.println("123");
           }
       }
    }
}

尤其是插入的顺序:

java 复制代码
try {
                Thread.sleep(1000);
                if (i == 5 ){
                    cat.start();
                    cat.join();

                }

通过先执行线程,然后在加入。

相关推荐
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区11 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大12 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai12 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说12 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json