(一)Thread类

1.结构

java.lang.Object

|---java.lang.Thread

2.创建线程的两种方法

(1)一种方法是将类声明为Thread的子类,该子类应重写Thread类的run方法

class PrimeThread extends Thread {long minPrime;PrimeThread(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}
}
PrimeThread p = new PrimeThread(143);
p.start();

(2)创建线程的另一种方法是声明实现Runnable接口的类,然后该类实现run方法。然后可以分配该类的实例,在创建Thread时作为一个参数来传递并启动

(3)这种方法给已经实现继承的类,提供了实现多线程的扩展方法,实现接口

class PrimeRun implements Runnable {long minPrime;PrimeRun(long minPrime) {this.minPrime = minPrime;}public void run() {// compute primes larger than minPrime. . .}
}
PrimeRun p = new PrimeRun(143);
new Thread(p).start();

代码1:第一种创建线程的方法

MyThread类

// 1.继承Thread类
public class MyThread extends Thread{private String threadName;public MyThread() {super();}// 提供一个有参的构造法方法,把名字传给父类的构造方法直接传递一个线程的名字public MyThread(String threadName) {super(threadName);this.threadName = threadName;}// 2.重写run方法@Overridepublic void run() {for(int i=0;i<5;i++) {System.out.println(this.getName()+": hello : "+i);}}
}

Main

public class Main {public static void main(String[] args) {//no_parameter_construction_method();threadName_construction_method();}/*** 1.调用无参数的构造方法创建线程对象和设置线程名字* */public static void no_parameter_construction_method() {// 3.创建线程的实例对象MyThread my1=new MyThread();MyThread my2=new MyThread();// 4.可以设置线程的名字,不设置默认使用JVM给分配的名字(Thread-N)my1.setName("线程1");my2.setName("线程2");// 5.启动线程// 调用run()的话,的就是单纯的调用方法// 调用线程应该使用start()方法my1.start();my2.start();System.out.println("end");}public static void threadName_construction_method() {// 3.创建线程的实例对象MyThread my3=new MyThread("线程3");MyThread my4=new MyThread("线程4");// 4.启动线程my3.start();my4.start();System.out.println("end");}
}

代码1:第二种创建线程的方法

OurThread类

// 1.实现Runnable接口
public class OurThread implements Runnable{// 2.重写run方法@Overridepublic void run() {for(int i=0;i<10;i++) {// 3.获取当前线程名字System.out.println(Thread.currentThread().getName()+": 你好 : "+i);}}
}

Main

public class Main {public static void main(String[] args) {// 这2个方法调用,不会等待上一个方法完事后,下一个方法才开始,而是不阻塞直接就开始createThread();createNameThread();}public static void createThread() {// 4.创建实现接口类对象// 5.创建线程OurThread ot1=new OurThread();Thread t1=new Thread(ot1);OurThread ot2=new OurThread();Thread t2=new Thread(ot2);t1.start();t2.start();System.out.println("end");}public static void createNameThread() {// 4.创建实现接口类对象// 5.创建线程,可以带名字,不带则使用JVM默认分配的名字OurThread ot1=new OurThread();Thread t1=new Thread(ot1,"线程01");OurThread ot2=new OurThread();Thread t2=new Thread(ot2,"线程02");t1.start();t2.start();System.out.println("end");}
}

转载于:https://blog.51cto.com/13634837/2091795

【 Thread】创建线程的2种方法相关推荐

  1. Java学习笔记:创建线程的两种方法

    Java学习笔记:创建线程的两种方法 一.预备工作 1.创建Maven项目ThreadDemo 2.在pom.xml里添加依赖 二.继承Thread类创建子线程

  2. Java创建线程的三种方法

    这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...

  3. Java 创建线程的三种方法比较

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述Java 创建线程的三种方法比较, 更多Java专业知识,广州疯狂jav ...

  4. 创建线程的七种方法 (图解 全网最全最详细)

    本文创建于 2021年5月14日 作者:Xiang 参考文献:创建多线程的四种方法 创建线程的8种方法 创建匿名线程的5种方法 特别鸣谢 文章目录 1.什么是多线程 2.线程状态 3.线程同步方法 4 ...

  5. java创建线程的两种方法区别

    在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口. 下面通过两个例子来分析两者的区别: 1)继承Thread类 public class TestThread exte ...

  6. 为什么不能线程调用类的成员函数_C++多线程编程之创建线程的几种方法

    点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.线程基础知识 可执行程序运行起来,就会生成一个进 ...

  7. java创建线程的四种方法

    第一种:  通过继承Thread类创建线程 第二种: 通过实现Runnable接口创建线程 这两种早已烂记于心,这里就不作过多的介绍, 主要介绍其源码 Thread类 implements Runna ...

  8. java for循环创建线程_Java创建线程的两种方法

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  9. java 创建线程的三种方法_java 创建线程的几种方式

    说道线程,肯定会想到使用 java.lang.Thread.java这个类 那么创建线程也主要有2种方式 第一种方式: public class MyThread extends Thread { p ...

最新文章

  1. Sequelize 4.43.0 发布,基于 Nodejs 的异步 ORM 框架
  2. Python:PDB文件中原子和残基重新编号
  3. C++文件输入和输出
  4. 关于react diff 算法(译文)
  5. 算法--------打家劫舍(动态规划,Java版本)
  6. 使用TestNG-xslt+ant来美化selenium测试报告
  7. Flex通用克隆(clone)方法
  8. (视频+图文)机器学习入门系列-第1章 引言
  9. TCP中的RTT和RTO
  10. 6.Excel项目排期表
  11. 是什么东西_隐形牙套附件是什么东西?
  12. Oracle下的Databse,Instance,Schemas
  13. Java native方法String转char*以及String[]转char**
  14. org.springframework.beans.BeanUtils
  15. 零基础学python用哪本书好-零基础自学python3 好用的入门书籍推荐
  16. base/7/x86_64/filelists_db FAILED
  17. 滤波电路对服务器的影响,滤波电路到底有什么作用?
  18. mysql主从 副本集,MongoDB的主从、副本集模式
  19. acer软件保护卡怎么解除_Acer软件保护卡下载
  20. 程序员如何规划自己的职业生涯

热门文章

  1. RocketMQ-初体验RocketMQ(01)_RocketMQ初体验
  2. Spring JDBC-使用XML配置声明式事务
  3. Oracle优化06-Hint
  4. 如何让服务器运行js,服务器端JavaScript运行环境Node.js的依赖性管理
  5. 如何正确运用计算机,如何正确使用电脑
  6. python结巴分词 词频统计_一个txt文档,已经用结巴分词分完词,怎么用python工具对这个分完词的文档进行计算统计词频,求脚本,非...
  7. python和c语言的对比_类C语言与Python负数除法求值间的差异
  8. JavaScript比较数组的方法
  9. oracle sys 查询语句,Oracle EBS-SQL (SYS-7):表单个性化查询.sql
  10. 计算机软件硬件试讲,试讲:初识计算机网络