new Thread(new Runnable(){})

一、写法介绍

JAVA是面向对象的,也就是说,对于一个方法等,它需要什么类型的对象,只要传入就可以了。

像这里,Thread类的构造方法中,需要一个实现了Runnable接口的对象,而new就是生成了个Runnable接口下的一个实例对象。

同等与这种写法,实例化了一个Runnable接口子类的实例

Thread t=new Thread(new MyRunnable());public class MyRunnable implements Runnable{@Overridepublic void run() {//具体实现}}

看起来是直接new一个接口,实际上是匿名内部类

因为接口不能实例化,new Runnable()是一个实现接口Runnable的类的对象,后面的run方法是该类里实现的方法,这就是匿名内部类的写法

二、匿名内部类

匿名内部类也就是没有名字的内部类

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

这里正是实现Runnable接口的简化代码

那么这里用到的Runnable接口是什么?

三、多线程

Java中,线程创建有三种方法:

1. 实现Runnable接口的run方法

public class RunableTest{  //继承Thread类并重写run方法  public static class RunableTask implements Runnable{  @Override  public void run(){  System.out.printlan('I am a child theread');  }  }  public static void mian(String[] args) throws InterruptedException{  //创建线程  RunableTask task = new RunableTask();  //启动线程  new Thread(task).start();  new Thread(task).start();  }  } 12345678910111213141516171234567891011121314151617

2. 继承Thread类并重写run方法

public class ThreadTest{ //继承Thread类并重写run方法 public static class MyThread extends Thread{ @Override public void run(){ System.out.printlan('I am a child theread'); } } public static void mian(String[] args){ //创建线程 MyThread thread = new MyThread; //启动线程 thread.start(); } }

3. 使用FutureTask方式

public class FutureTest{  //创建任务类,类似Runnable  public static class CallerTask implements Callable<String>{  @Override  public String call() throws Exception{  return 'hello'  }  }  public static void mian(String[] args) throws InterruptedException{  //创建异步任务  FutureTask<String> futureTask = new FutureTask<>(new CallerTask());  //启动线程  new Thread(futureTask).start();  try{  //等待任务执行完毕,并返回结果  String result = futureTask.get();  System.out.println(result);  } catch (ExecutionException e){  e.printStackTrace();  }  }}1234567891011121314151617181920212212345678910111213141516171819202122

所以这里实际上是通过实现Runnable接口的run方法去创建多线程。并new了一个线程对象。

(0)

相关推荐

  • Java多线程上下文传递在复杂场景下的实践

    一.引言 海外商城从印度做起,慢慢的会有一些其他国家的诉求,这个时候需要我们针对当前的商城做一个改造,可以支撑多个国家的商城,这里会涉及多个问题,多语言,多国家,多时区,本地化等等.在多国家的情况下如 ...

  • Java并发编程之线程的创建

    简介 线程是基本的调度单位,它被包含在进程之中,是进程中的实际运作单位,它本身是不会独立存在.一个进程至少有一个线程,进程中的多个线程共享进程的资源. Java中创建线程的方式有多种如继承Thread ...

  • 【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法

    【JAVA并发第二篇】Java线程的创建与运行,线程状态与常用方法

  • Java之Callable和Runnable

    Java之Callable和Runnable

  • 每天一句口语练习:Hanging by a thread

    (↑点击上面绿标在线试听今天的音频) 今天为大家挑选的实用英语口语句子是: Hanging by a thread. 美 [ ˈhæŋɪŋ / baɪ / ə / θred ] 命悬一线 / 危在旦夕 ...

  • 多线程之旅(Thread)

    在上篇文章中我们已经知道了多线程是什么了,那么它到底可以干嘛呢?这里特别声明一个前面的委托没看的同学可以到上上上篇博文查看,因为多线程要经常使用到委托.源码一.异步.同步1.同步(在计算的理解总是要你 ...

  • Java 浅析 Thread.join()

    概要 本文分三个部分对Thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...

  • Thread中run和start方法的模板设计模式

    创建一个Thread需要继承Thread重写run方法或者实现Runnable接口中的run方法,其实两者都是一样因为Thread也继承了Runnable接口. 实现了run方法,但是启动确实用sta ...

  • java学习——110.实现Runnable接口

    因为Java只支持单继承,如果已经继承了一个类,就不能再继承Thread类了,此时,要实现多继承,可以实现Runnable接口. 1.Runnable接口 Runnable接口就是为实现多线程的,它里 ...

  • .NET异步和多线程系列(二)- Thread和ThreadPool

    一.Thread类 C#里面的多线程:Thread类是C#语言对线程对象的一个封装. 首先看下如何开启线程,执行委托的内容: /// <summary>/// 一个比较耗时耗资源的私有方法 ...

  • C# Thread IsBackground 前后台线程

    Thread 区别前后台线程属性IsBackground 1.  创建一个线程默认是前台线程,即IsBackground=true 2.  主线程的结束会关联前台线程,前台线程会阻止主进程的结束,需等 ...

  • Thread.Sleep(0)的妙用

    Thread.Sleep(0) 表示挂起0毫秒,你可能觉得没作用,你要写Thread.Sleep(1000) 就有感觉了.似乎毫无意义. MSDN的说明:指定零 (0) 以指示应挂起此线程以使其他等待 ...

  • skipping archived logs of thread 1 from sequence 29 to 46; already backed up

    问题描述:删除归档的备份,在进行归档的重新备份,提示:skipping archived logs of thread 1 from sequence 29 to 46; already backed ...