java018

本文详细介绍了Java中的多线程概念,包括通过继承Thread类、实现Runnable接口以及使用Callable接口创建线程的方法。同时,讨论了线程的状态转换,如新生、就绪、运行、阻塞和终止,并列举了各种导致状态变化的操作。此外,还提到了线程礼让、线程同步等重要概念。
摘要由CSDN通过智能技术生成

1,多线程

1.1多线程的定义

多任务执行,多路径执行

如果说没有多任务,就不需要使用多线程

进程与线程的关系

1.2创建多线程
方法1:继承Thread类,重写run()+start()

​ run()不能抛出异常,只能捕捉异常,没有返回值

public class Test02 extends Thread{
    //重写run()方法
    public void run(){
        for(int i=0;i<=10;i++){
            System.out.println("睡觉.....");
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        Test02 test=new Test02();
        //开启多线程
        test.start();
        for (int i=0;i<=10;i++){
            System.out.println("打呼噜....");
            try {
                Thread.sleep(20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

方法2:实现Runnable接口,重写run()+start() ***
public class Test03 implements Runnable{
    public static void main(String[] args) {
        Test03 ts=new Test03();
        Thread th=new Thread(ts);
        //开启多线程
        th.start();
        for(int i=0;i<40;i++){
            System.out.println("打呼噜....");
        }
    }
    @Override
    public void run() {
        for(int i=0;i<=20;i++){
            System.out.println("睡觉.....");
        }
    }
}

方法3:juc包下Callable接口,重写call()方法

public class Test05 implements Callable<Integer> {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        Test05 ts=new Test05();
        ExecutorService server= Executors.newFixedThreadPool(1);
        Future<Integer> f1 =  server.submit(ts);
        int a=f1.get();
        System.out.println(a);
        for(int i=0;i<=10;i++){
            System.out.println("吃饱了吃饱了");
            Thread.sleep(20);
        }
    }
    @Override
    public Integer call() throws Exception {
        int s=0;
        for(int i=0;i<=10;i++){
            System.out.println("饿死了");
            s++;
            Thread.sleep(20);
        }

        return s;
    }
}

注意:在定义线程体时,可以通过内部类,局部内部类,或者匿名内部类来定义

例如:

//使用接口Runnable来定义多线程时,通常是
Test03 ts=new Test03();
Thread th=new Thread(ts);
//如果换成使用匿名内部类时
Test03 ts=new Test03();
Thread th=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println();
            }
        });

1.3:线程的状态
  • 新生状态:new Thread(),new的时候就是一个线程进入新生状态
  • 就绪状态:start()一个线程就会进入到就绪状态,进入就绪列进行等待,可以等待cpu的调度
  • 运行状态:当cpu调用调度到就绪队列中的某个线程,这个线程开始进入运行状态
  • 阻塞状态:线程无法正常执行,可能进入到阻塞状态
  • 终止状态:线程执行完毕
一个线程如何进入到就绪状态:
  • start()
  • 线程切换:被切换的线程恢复到就绪状态,等待下一次被调用
  • 阻塞解除
  • yield()礼让线程
进入阻塞状态的方式:
  • sleep()
  • join()
  • wait()
  • IO
进入终止状态的方式:
  • 通过stop()直接停止方法
  • 通过添加标识符 判断
  • 正常执行结束

注意:一个线程一旦执行完毕,不能回复,重新new,也是新的线程

阻塞解除无法直接回复到运行状态,会回复到就绪状态,等待下一次被cup调度

要安装Empyrean的018pdk,您需要按照以下步骤进行操作: 1. 首先,您需要确保您的计算机已经安装了适当的编程软件和工具。例如,您可能需要安装Java开发工具包(JDK)和终端模拟器等软件。 2. 在您的计算机上创建一个目录,用于存储Empyrean的018pdk文件和相关文件。 3. 在Empyrean的官方网站上下载018pdk的安装文件。您可以通过访问Empyrean的官方网站或者通过其他可信的软件下载平台获取到该文件。 4. 下载完成后,将安装文件解压到之前创建的目录中。 5. 打开终端或命令提示符,导航到解压后的目录。 6. 运行安装脚本。根据您的操作系统,可以通过运行不同的命令来执行安装脚本。例如,对于Windows系统,您可能需要运行一个批处理文件;而对于Linux或Mac系统,您可能需要运行一个shell脚本。 7. 安装过程中,您可能需要提供一些必要的配置信息,例如安装路径、目标文件夹等。请根据安装程序的提示进行操作。 8. 等待安装过程完成。安装过程可能需要一些时间,具体时间取决于您的计算机配置以及网络速度。 9. 安装完成后,您可以验证安装是否成功。您可以尝试运行Empyrean的018pdk提供的一些示例代码,或者通过命令行检查安装目录是否包含所需的文件和文件夹。 通过按照上述步骤进行操作,您应该能够成功安装Empyrean的018pdk,并开始使用它进行开发和编程工作。如果在安装过程中遇到任何问题,建议您查阅官方的安装文档或寻求相关技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值