ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第八章 多线程 3 - 创建多线程的两种方式

2022-06-13 22:35:47  阅读:159  来源: 互联网

标签:main Runnable run Thread 创建 第八章 start 线程 多线程


创建多线程的两种方式
方式一:继承Thread类的方式

  1. 创建一个继承Thread类的子类
  2. 重写Thread类中的run() --> 将执行代码逻辑声明在run()中
  3. 创建Thread类的子类对象
  4. 通过此对象调用start(): ① 启动当前线程 ② 调用当前线程的run()

【代码】

public class ThreadDemo {
 
  public static void main(String[] args) {
      //设置线程名字,不设置则使用默认构造 0 1 2 3...这样
      Thread.currentThread().setName("主线程");
      MyThread myThread = new MyThread();
      myThread.setName("子线程:");
      //开启线程
      myThread.start();
      for(int i = 0;i<5;i++){
          System.out.println(Thread.currentThread().getName() + i);
      }
  }
}
 
//实现方式之继承Thread
class MyThread extends Thread{
  //重写run()方法
  public void run(){
      for(int i = 0;i < 5; i++){
          System.out.println(Thread.currentThread().getName() + i);
      }
  }
}
 
//注意:由执行结果可以看出,并非按照顺序,而是通过抢占cpu资源,抢到则执行。

执行结果:

main thread0
子线程:0
子线程:1
子线程:2
main thread1
子线程:3
main thread2
子线程:4
main thread3
main thread4

说明两个问题:

问题一:我们启动一个线程,必须要调用start(),不能调用run()的方式启动线程
问题二:如果再启动一个线程,必须重新创建一个Thread子类的对象,调用此对象的start()

方式二:实现Runnable接口的方式

  1. 创建一个实现了Runnable接口的类
  2. 实现类去实现Runnable中的抽象方法:run()
  3. 创建实现类的对象
  4. 将此对象作为参数传递到Thread类的构造器中,创建Thread类的对象
  5. 通过Thread类的对象调用start()

【代码】

public class RunnableDemo {
	
	 public static void main(String[] args) {
	      //设置线程名字,不设置则使用默认构造 0 1 2 3...这样
	      Thread.currentThread().setName("主线程");
	      Thread myThread = new Thread(new MyRunnable());//作为参数传入
	      myThread.setName("实现Runnable接口方式,子线程:");
	      //开启线程
	      myThread.start();
	      for(int i = 0;i<5;i++){
	          System.out.println(Thread.currentThread().getName() + i);
	      }
	  }
	}
 
	//实现方式之实现Runnable
	class MyRunnable implements Runnable{
	  //重写run()方法
	  public void run(){
	      for(int i = 0;i < 5; i++){
	          System.out.println(Thread.currentThread().getName() + i);
	      }
	  }
	}

执行结果:

主线程0
实现Runnable接口方式,子线程:0
实现Runnable接口方式,子线程:1
实现Runnable接口方式,子线程:2
主线程1
实现Runnable接口方式,子线程:3
实现Runnable接口方式,子线程:4
主线程2
主线程3
主线程4

两种方法的对比:
开发中:

优先选择:实现Runnable接口的方式

原因:

  1. 实现的方式没有类的单继承性的局限性
  2. 实现方式更加适合来处理多线程共享数据的情况。

联系:public class Thread implements Runnable
相同点:

两个方式都需要重写run(),将线程要执行的逻辑代码声明在run()中。
目前两种方式,要想启动线程,都是调用的Thread类中的start().

标签:main,Runnable,run,Thread,创建,第八章,start,线程,多线程
来源: https://www.cnblogs.com/anjiaxiaopihai/p/16372520.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有