创建和启动一个Java线程

创建和启动线程

新建一个线程

Thread thread = new Thread();

启动一个 Java 线程,只需要调用它的 start() 方法

thread.start()

这个例子里没有写其他的代码,当线程启动之后马上就停止了。

有两个办法指定线程去执行代码。一种是创建一个 Thread 的子类,覆盖 run() 方法。第二种是传入一个实现 Runnable 接口的对象给 Thread 的构造方法。

线程子类

创建线程的子类

public class MyThread extends Thread {

public void run() {

System.out.println("MyThread running");

}

}

创建和启动线程

MyThread myThread = new MyThread();

myThread.start();

当然,匿名子类也是可以的

Thread thread = new Thread() {

public void run() {

System.out.println("MyThread Running");

}

};

thread.start();

实现 Runnable 接口

实现接口

public class MyRunnable implements Runnable {

public void run() {

System.out.println("MyRunnable running");

}

}

启动线程

Thread thread = new Thread(new MyRunnable());

thread.start();

也可使用实现 Runnable 接口的匿名类

Runnable myRunnable = new Runnable() {

public void run() {

System.out.println("Runnable running");

}

};

Thread thread = new Thread(myRunnable);

thread.start();

用子类还是实现接口?

都可以。不过我喜欢用实现接口的方式。

run() 和 start() 的区别

调用 start() 方法才是启动线程的正确姿势。

线程名称

给线程取个名字,可以和其它线程区分开来

Thread thread = new Thread("New Thread") {

public void run() {

System.out.println("run by: " + getName());

}

};

thread.start();

System.out.println(thread.getName());

MyRunnable runnable = new MyRunnable();

Thread thread = new Thread(runnable, "New Thread");

thread.start();

System.out.println(thread.getName());

Thread.currentThread()

Thread.currentThread() 方法返回一个执行 currentThread() 方法的 Thread 实例的引用。

Thread thread = Thread.currentThread();

一获取到 Thread 对象的引用,就可调用它的方法,比如获取它的名称

String threadName = Thread.currentThread().getName();

Java Thread Example

public class ThreadExample {

public static void main(String[] args) {

System.out.println(Thread.currentThread().getName());

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

new Thread("" + i) {

public void run() {

System.out.println("Thread: " + getName() + " running");

}

}.start();

}

}

}

打印结果

main

Thread: 0 running

Thread: 2 running

Thread: 3 running

Thread: 1 running

Thread: 4 running

Thread: 5 running

Thread: 6 running

Thread: 8 running

Thread: 9 running

Thread: 7 running

从打印结果可以看到,即使线程是按顺序(1,2,3...)执行 start() 方法的,thread 1 不一定是第一个打印消息的线程。因此线程是并发执行而不是顺序执行的。由 JVM 或者操作系统决定线程的执行顺序,和线程的 start() 方法执行顺序无关。

java新开一个线程run_创建和启动一个Java线程相关推荐

  1. 线程的创建与启动——Thread 类有两个常用的构造方法:Thread()与 Thread(Runnable)||多线程运行结果是随机的

    线程的创建与启动 在 Java 中,创建一个线程就是创建一个 Thread 类(子类)的对象(实例). Thread 类有两个常用的构造方法:Thread()与 Thread(Runnable).对应 ...

  2. java线程的创建和启动深度解析

    线程的创建和启动 java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例. java创建线程有三种方法: 一:继承Thread类创建线程类 通过Thread类来创建并 ...

  3. Java线程:创建与启动

    Java线程:创建与启动 一.定义线程 1.扩展java.lang.Thread类. 此类中有个run()方法,应该注意其用法: public void run() 如果该线程是使用独立的 Runna ...

  4. Java的知识点25——程序、进程与线程 || 线程的创建和启动

    程序.进程与线程 进程的特点:动态性.并发性.独立性 并发和并行的区别 并发:多个CPU同时执行多个任务 并行:一个CPU(采用时间片)同时执行多个任务 注:很多多线程是模拟出来的,真正的多线程是指有 ...

  5. java线程 创建与启动_浅析Java中线程的创建和启动

    前言 线程是一个程序内部的顺序控制流.cpu实际上在一个时间点上,只执行一个.只不过我们把cup分成了多个时间片,由于速度很快,我们看起来像是多个线程.就像你的时间分成几片,这样整体看来做事情有规律, ...

  6. python 中主线程结束 子线程还在运行么_python 线程之一:线程的创建、启动及运行方式

    threading:这个模块在较低级的模块 _thread 基础上建立较高级的线程接口 以后我们就用 threading 模块来管理线程就可以了. Tread 类:控制线程创建.启动及运行方式 一.线 ...

  7. 多线程编程(2): 线程的创建、启动、挂起和退出

    python多线程编程(2): 线程的创建.启动.挂起和退出 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法.而创建 ...

  8. 全网最硬核 Java 新内存模型解析与实验 - 1. 什么是 Java 内存模型

    个人创作公约:本人声明创作的所有文章皆为自己原创,如果有参考任何文章的地方,会标注出来,如果有疏漏,欢迎大家批判.如果大家发现网上有抄袭本文章的,欢迎举报,并且积极向这个 github 仓库 提交 i ...

  9. java runnable 启动_Java多线程:线程的创建与启动

    # 面试题: Java中创建线程有几种方式. 不同的创建方式有什么区别. 如何启动一个线程. # Java中创建线程的方式 JDK源码中的描述:两种 image.png 第一种是继承Thread类,重 ...

  10. 线程的创建开销大吗?线程创建开销包括哪些?线程池

    1-1. 关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说. 关于资源,Java线程的线程栈所占用的内存是在Java堆外的,所以是不受java程序控制的,只受系 ...

最新文章

  1. Java虚拟机笔记(一):类加载机制
  2. Acwing第 36 场周赛【完结】
  3. 【PM模块】维护处理简介
  4. 如何估算Oracle数据库所需的UNDO表空间的大小
  5. 透彻理解回文~单链表的逆序~
  6. pll制作分频器_PLL学习过程记录
  7. to_csvread_csvisnullisnanisna
  8. 一文读懂Hive(架构原理,DDL,常用函数,优化技巧)
  9. 【报告分享】2020解读中国互联网:局部领先、快进的数字化发展.pdf(附下载链接)...
  10. 西南科技大学计算机专业宿舍条件怎么样,西南科技大学宿舍条件,宿舍环境图片(10篇)...
  11. SAP WDA 自建Portal
  12. 【每日算法Day 77】LeetCode 第 181 场周赛题解
  13. python3.8安装pygame_Python3.8安装Pygame教程
  14. 从零开始学习SpringCloud
  15. 什么是Base64算法?——全网最详细讲解
  16. mysql的max_allowed_packet配置
  17. 平行四边形 java_Java编写三角形和平行四边形
  18. CSS,HTML,JS 以及Vue前端面试题八股文总结【看完你就变高手】
  19. python学习_循环语句
  20. 生成网站与发布网站的区别

热门文章

  1. Linux系统的查看系统信息和常用监控命令
  2. Android 第一行代码
  3. REDGATE又一好用的脚本工具ScriptsManager1.3
  4. 精确地计算Web页面中滚动条的宽度
  5. matplotlib库使用
  6. 学习Linux让我进入了知名企业 原
  7. POJ-3468-A Simple Problem with integers
  8. Mysql表的过滤查询
  9. Android基础控件EditText
  10. 《自己动手做交互系统》——第1章 欢迎来到有形交互的世界 1.1 项目简介和背景知识...