多线程<一>创建的五中方式

一,多线程创建方式一继承Thread类创建线程

Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:

 1 public class MyThread extends Thread {
 2   public void run() {
 3    System.out.println("MyThread.run()");
 4   }
 5 }
 6
 7 MyThread myThread1 = new MyThread();
 8 MyThread myThread2 = new MyThread();
 9 myThread1.start();
10 myThread2.start();

这种方式主要的原理就是继承了tread类,当

我们来看一下源码当调用start方法的时候,就会调用start0的方法,而start0有一个native关键字,我们可以理解成当调用start0的时候才去调用了run的方法。

 1  public synchronized void start()
 2     {
 3         boolean flag;
 4         if(threadStatus != 0)
 5             throw new IllegalThreadStateException();
 6         group.add(this);
 7         flag = false;
 8         start0();
 9         flag = true;
10         try
11         {
12             if(!flag)
13                 group.threadStartFailed(this);
14         }
15         catch(Throwable throwable) { }
16         break MISSING_BLOCK_LABEL_70;
17         Exception exception;
18         exception;
19         try
20         {
21             if(!flag)
22                 group.threadStartFailed(this);
23         }
24         catch(Throwable throwable1) { }
25         throw exception;
26     }
27
28     private native void start0();

2、实现Runnable接口创建线程

如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口,如下:

1 public class MyThread extends OtherClass implements Runnable {
2   public void run() {
3    System.out.println("MyThread.run()");
4   }
5 }  

为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:

1 MyThread myThread = new MyThread();
2 Thread thread = new Thread(myThread);
3 thread.start()

事实上,当传入一个Runnable target参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:

1 public void run() {
2   if (target != null) {
3    target.run();
4   }
5 }  

这里应用了典型的回掉函数,A调用B,B在调用A,在定义一个接口定义准则,确定规范。

三,匿名函数创建

匿名函数必须要继承父类或者实现接口的。

有时候我们只用一次的话那么就可以用匿名函数了。

1 new Thread() {//创建方式1
2     public void run() {
3         for(int x=0; x<50; x++) {
4             System.out.println(Thread.currentThread().getName()+"....x="+x);
5         }
6     }
7 }.start();
1 new Thread(new Runnable() {//创建方式2
2     public void run() {
3         for(int x=0; x<50; x++) {
4             System.out.println(Thread.currentThread().getName()+"....z="+x);
5         }
6     }
7 }).start();

原文地址:https://www.cnblogs.com/qingruihappy/p/9356917.html

时间: 2024-08-29 08:01:06

多线程<一>创建的五中方式的相关文章

【java多线程】多线程的创建三种方式--笔记

申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. 比如:让主函数 main 在打印1~100之间的所有整数的时候,要求在主函数打印到 20 的时候,再运行另一个类里的程序,让它打印10~100之间的所有整数. 这里忽略同进程内的多线程之间的抢占时间问题,上面的举例需求是要求一个程序只要有发生同时运行俩个程序的情况就行,即不准出现无论程序跑多少次都是

锁和多线程:线程创建3种方式(一)

线程 锁Synchronized 1.线程创建 2.线程安全 搞明白 线程 锁和多线程系列 1.线程创建 线程创建常见的三种方式: 继承Thread类 实现Runnable接口 实现Callable接口 第三种方式有异步调用效果,类似js中的ajax可以接收返回值,其余两种不能. package thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import

JAVA学习第二十三课(多线程(二))- (多线程的创建方式二 :实现Runnable接口(常用))

当一个类有父亲,但是其中的功能还希望实现线程,那么就不能采用继承Thread的方式创建线程 那么就可以通过接口的方式完成 准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行 实现Runnable接口,Runnable接口中只有一个方法run 一.创建线程的第二种方法 Runnable的出现仅仅是将线程的任务进行了对象的封装 /* * 创建线程的第二种方法 * 1.定义类实现Runnable接口 * 2.覆盖接口中的fun方法,将线程的任务代码封装到run方法中 * 3.通过Thread

java多线程的创建方式

根据Thread类中的run方法 public void run() { if (this.target == null) return; this.target.run(); } 可以知道运行多线程代码有两种方式,一种是运行Thread类run方法中的代码,一种是运行target中的run代码. 方法一:运行Thread类run方法中的代码 Thread thread1=new Thread(){ @Override public void run() { while(true){ try {

Java多线程(1) 创建

一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下以下这张较为经典的图: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的start()方法(t.start();).线程即进入就绪状态.处于就绪状态的线程,仅仅是说明此线程已经做好了准备.随时等待CPU调度运行.并非说运行了t.start()此线程马上就会运行: 执行状态(Runn

多线程_创建线程_继承Thread类

public class ThreadDemo {   public static void main(String[] args){         Demo d = new Demo();   d.start();      for(int i = 0;i < 100;i++){      System.out.println("MainThread" + i);   }   } } class Demo extends Thread {   public void run(

iOS开发多线程篇—创建线程

iOS开发多线程篇—创建线程 一.创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建.启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 -

多线程的两种实现方式

java中多线程可以采用两种方式实现,分别是继承Thread类重写run方法和实现Runnable接口重写run方法. 继承Thread类重写run方法举例如下: /* 需求:在主线程之外继承Thread类创建两独立线程,分别打印1至50. */ class ThreadTest extends Thread{ public void run(){ for(int i = 1; i <= 50; i++) System.out.println(Thread.currentThread().get

java 22 - 9 多线程之 代码实现的方式2

多线程的代码实现: 方式2:实现Runnable接口 步骤: A:自定义类MyRunnable实现Runnable接口 B:重写run()方法 C:创建MyRunnable类的对象 D:创建Thread类的对象,并把C步骤的对象作为构造参数传递(2种方法) a:Thread(Runnable target) b:Thread(Runnable target, String name) 方式2的好处: A:因为java的继承方式是单继承,方式2可以避免java单继承带来的局限性 B:适合多个相同的