首页 > 编程语言 >Java线程内容

Java线程内容

时间:2024-09-19 21:03:44浏览次数:7  
标签:Java Thread void start 线程 内容 new public

一:线程的创建

  1. 继承Thread类 重写run方法
public class MyTest {
    public static void main(String[] args) {
        MyJob mj = new MyJob();
        mj.start();
    }
}
class MyJob extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("MyJob:" + i);
        }
    }
}
  1. 实现Runnable接口 重写run方法(用的最多的)
public class MiTest {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread t1 = new Thread(myRunnable);
        t1.start();
    }
}

class MyRunnable implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("MyRunnable:" + i);
        }
    }
}

最常用的方式是
匿名内部类方式:

Thread t1 = new Thread(new Runnable() {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("thread:" + i);
        }
    }
}).start();;

lambda方式:

Thread t2 = new Thread(() -> {
    for (int i = 0; i < 10; i++) {
        System.out.println("thread:" + i);
    }
}).start();
  1. 实现Callable接口 重写call方法,配合FutureTask
    特点:可以返回结果
    public class MiTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
    MyCallable myCallable = new MyCallable();
    FutureTask futureTask = new FutureTask(myCallable);
    //创建Thread线程
    Thread t1 = new Thread(futureTask);
    //启动线程
    t1.start();
    //获取结果
    Object count = futureTask.get();
    System.out.println("返回结果:" + count);
    }
    }

class MyCallable implements Callable{

@Override
public Object call() throws Exception {
    int count = 0;
    for (int i = 0; i < 10; i++) {
        count += i;
    }
    return count;
}

}

4. 基于线程池构建线程

二:Java中线程的6种状态
![](/i/l/?n=24&i=blog/3517912/202409/3517912-20240919210531382-887250255.png)

说明:
NEW(新建状态):Thread对象被创建出来了,但是还没有执行start方法。
RUNNABLE(就绪状态):Thread对象调用了start方法,就为RUNNABLE状态(CPU调度/没有调度)
BLOCKED(阻塞状态):synchronized没有拿到同步锁,被阻塞的情况
WAITING(等待状态):调用wait方法就会处于WAITING状态,需要被手动唤醒
TIME_WAITING(超时等待):调用sleep方法或者join方法,会被自动唤醒,无需手动唤醒
TERMINATED(结束状态):run方法执行完毕,线程生命周期到头了
BLOCKED、WAITING、TIME\_WAITING:都可以理解为是阻塞、等待状态,因为处在这三种状态下,CPU不会调度当前线程

标签:Java,Thread,void,start,线程,内容,new,public
From: https://www.cnblogs.com/chengdanally/p/18420608

相关文章

  • 在Java中,有没有其他方式可以替代List<Map<String,Object>>来存储和处理数据?
    在Java中,有多种方式可以替代List<Map<String,Object>>来存储和处理数据。选择哪种方式取决于你的具体需求,比如数据结构的复杂性、类型安全、性能要求等。以下是一些常见的替代方案:自定义类(POJOs):创建一个或多个自定义类来表示数据。这种方式提供了类型安全,并且代码更易于理......
  • java学习9.19
    结合前端,在本地运行实现登陆操作。将在输入框的数据传给服务器,服务器再通过调用数据库的数据进行对比,实现简单的判断逻辑到这里的我就感觉内容多了起来,在之前连接数据库,数据库操作的时候,跟着教程走,只是知道简单的用法也能在之后自行配置这里的话数据库等操作变成了一个环节,还有......
  • Java开发环境搭建:JDK与Eclipse的完美组合
    摘要:本文简述了Java开发环境的搭建,包括JDK的安装、环境变量配置,以及EclipseIDE的设置。提供了详细的步骤指导,帮助Java初学者快速搭建开发环境并运行第一个项目。Java的跨平台特性与环境需求我们写C/C++时,直接下载VisualStudio,然后在里面直接写代码就可以了。但是Java不行。这不是......
  • Springboot基于JAVA技术的旅游信息交互系统6mj9s--程序+源码+数据库+调试部署+开发环
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容随着旅游业的蓬勃发展,游客对于旅游信息的获取与交互需求日益增长。为了提升旅游体验,促进旅游资源的有效整合与利用,本项目拟设计并实现一个基于JAVA......
  • Springboot基于Java对运动心跳数据分析系统设计与实现455j4(程序+源码+数据库+调试部署
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着健康意识的提升,运动已成为现代人生活的重要组成部分。心跳数据作为反映人体健康状态的重要指标,在运动过程中尤为重要。然而......
  • 力扣42 接雨水 Java版本
    文章目录题目描述代码1题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接......
  • centos789手动无脑用sh脚本安装Java8
    #老师给的文件是jdk1.8版本,所以我这边写的也是8的脚本输入命令:mkdir–p/export/data#放置相关的数据文件输入命令mkdir–p/export/servers#软件的安装目录输入命令:mkdir–p/export/software上传文件jdk-8u241-linux-x64.tar.gz到/export/software目录然后写一个安装......
  • java的二维数组
    二维数组的初始化 二维数组的进行for循环时的判断条件怎么确定的呢?  因为在二维数组是特殊的一维数组,c语言中二维数组首元素的代表的是地址,而首元素代表的是一组一维数组,计算首元素的长度也就是计算二维数组的行下标为0的一维数组的长度所以判断数组名的长度也就是判断......
  • centos789手动无脑用sh脚本安装Java8
    #老师给的文件是jdk1.8版本,所以我这边写的也是1.8的脚本输入命令:mkdir–p/export/data#放置相关的数据文件输入命令mkdir–p/export/servers#软件的安装目录输入命令:mkdir–p/export/software上传文件jdk-8u241-linux-x64.tar.gz到/export/software目录然后写一个安......
  • JAVA 序列化和反序列化
    序列化:把对象转换为字节序列的过程称为对象的序列化反序列化:把字节序列转换为对象的过程称为对象的反序列化对象序列化的作用1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中2)在网络上传送对象的字节序列ObjectOutputStream代表对象输出流,它的writeObject(Obje......