精华内容
下载资源
问答
  • 创建线程的方式

    2019-03-07 10:36:23
    面试的过程中我们经常会遇到创建线程(对象)有多少种方式,具体如何实现等类似的问题,下面我们就来详细探讨下 首先明确创建线程主要有四种方式: 1、 通过实现Runnable接口...在你简述这四种方式创建线程的方式...

    面试的过程中我们经常会遇到创建线程(对象)有多少种方式,具体如何实现等类似的问题,下面我们就来详细探讨下

     首先明确创建线程主要有四种方式:

    1、     通过实现Runnable接口来创建线程

    2、     通过继承Thread类来创建线程

    3、     通过实现Callable接口来创建线程

    4、     通过(Executor框架)线程池创建线程

    在你简述这四种方式创建线程的方式后,面试官可能还会问你Runnable接口和Callable接口的区别是?

    1、     Callable规定方法是call(),Runnable规定的方法是run()。

    2、     Callable的任务执行后可以返回值,而Runable的任务是不能返回值的。

    3、     Call()方法可以抛出异常,run()方法不可以抛出异常。

    4、     运行Callable任务可以拿到一个Future对象,标识异步计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。

    一、通过实现Runnable接口来创建线程

    public class RunnableTest {
    	public static void main(String[] args) {
    		testRunnable runnable = new testRunnable();
    		Thread thread = new Thread(runnable,"Runnable");
    		thread.start();
    	}	
    }
    class  testRunnable implements Runnable{
    	@Override
    	public void run() {
    		System.out.println(Thread.currentThread().getName()+" : 实现Runnable接口,创建的线程");
    	}
    }
    

    二、通过继承Thread类来创建线程

    public class TestThread extends Thread{
    			@Override
    			public void run() {
    				System.out.println(Thread.currentThread().getName()+"继承Thread创建线程");
    			}
    		}
    public class ThreadTest {
    	public static void main(String[] args) {
    		TestThread thread = new TestThread();
    		Thread threads = new Thread(thread,"extends Thread");
    		threads.start();
    	}	
    }
    

    三、通过实现Callable接口来创建线程

    public class TestCallables {

             public static void main(String[] args) {

                       TestCallable testCallable = new TestCallable();

                       FutureTask<Integer> future=new FutureTask<Integer>((Callable<Integer>)()->{

                                System.out.println(Thread.currentThread().getName()+"这是实现Callable接口创建的线程");

                                return 5;

           }

                                 );

            new Thread(future,"Callable:").start();

            try {

                                System.out.println("子线程的返回值:"+future.get());

                       } catch (InterruptedException e) {

                                e.printStackTrace();

                       } catch (ExecutionException e) {

                                e.printStackTrace();

                       }//get()方法会阻塞,直到子线程执行结束才返

             }

    }

    四、    通过(Executor框架)线程池创建线程

    public class TestExecutorService { 
    	public static void main(String[] args) {
    		 ExecutorService executorService = Executors.newCachedThreadPool();  
    		 executorService.execute((Runnable)()->{
    					System.out.println(Thread.currentThread().getName()+" : 使用线程池,创建的线程"); 
    		  }
    			 );
    		 executorService.shutdown();  
    	}
    }
    
    展开全文
  • java 创建线程的方式

    千次阅读 2020-10-02 15:18:53
    Java创建线程的方式 1 官方API里面的说法 通过官方 API 可以发现创建线程的方式有两种,第一种是通过继承 Thread 类,重写 run 方法;第二种是通过实现 Runnable 接口,创建线程时传入该接口的子类。 2 我的观点 ...

    Java创建线程的方式

    1 官方API里面的说法
    通过官方 API 可以发现创建线程的方式有两种,第一种是通过继承 Thread 类,重写 run 方法;第二种是通过实现 Runnable 接口,创建线程时传入该接口的子类。
    2 我的观点
    这种说法是不严谨的,Java 中代表线程的就只有 Thread 这个类,我们可以分析 start 方法源码,线程的执行单元就是 run 方法,你可以通过继承 Thread 然后重写 run 方法实现自己的业务逻辑,也可以实现 Runnable 接口实现自己的业务逻辑。java虚拟机帮我们创建了线程,我们只需要重写run方法来实现自己的逻辑。

    @Override 
    public void run() {
    // 如果构造 Thread 时传递了 Runnable,则会执行 Runnable 的 run 方法
     if (target != null) 
     { 
     target.run(); 
     } 
     // 否则需要重写 Thread 类的 run 方法 }
    

    3 总结
    通过源码发现,创建线程只有一种方式那就是构造 Thread 类,而实现线程的执行单元则有两种方式,第一种是重写 Thread 类的 run 方法,第二种是实现 Runnable 接口的 run 方法,并且将 Runnable 实例用作构造 Thread 的参数。

    展开全文
  • java创建线程的方式

    热门讨论 2017-02-19 21:37:02
    创建线程的方式一 继承Thread类 创建线程的方式二 创建线程的第二种方式.使用Runnable接口. 该类中的代码就是对线程要执行的任务的定义. 1:定义了实现Runnable接口 2:重写Runnable接口中的...

    创建线程的方式一

    继承Thread


    创建线程的方式二

    创建线程的第二种方式.使用Runnable接口.

    该类中的代码就是对线程要执行的任务的定义.

    1:定义了实现Runnable接口

    2:重写Runnable接口中的run方法,就是将线程运行的代码放入在run方法中

    3:通过Thread类建立线程对象

    4:将Runnable接口的子类对象作为实际参数,传递给Thread类构造方法

    5:调用Thread类的start方法开启线程,并调用Runable接口子类run方法

    为什么要将Runnable接口的子类对象传递给Thread的构造函数,因为自定义的run方法所属对象是Runnable接口的子类对象,所以要让线程去执行指定对象的run方法

    public class Demo1 {
    	public static void main(String[] args) {
    		MyRun my = new MyRun();
    		Thread t1 = new Thread(my);
    		t1.start();
    		for (int i = 0; i < 200; i++) {
    			System.out.println("main:" + i);
    		}
    	}
    }
    class MyRun implements Runnable {
    	public void run() {
    		for (int i = 0; i < 200; i++) {
    			System.err.println("MyRun:" + i);
    		}
    	}
    }
    


    展开全文
  • 创建线程的方式Callable

    千次阅读 2019-06-19 16:00:56
    * 一、创建线程的方式Callable 实现Callable接口相较于实现Runnable接口的方式,方法可以有返回值,并且可以抛出异常 * 二、执行Callable方式,需要FutureTask实现类的支持,用于接受运算结果。FutureTask是...
    
    /**
     * 一、创建线程的方式Callable  实现Callable接口相较于实现Runnable接口的方式,方法可以有返回值,并且可以抛出异常 
     * 二、执行Callable方式,需要FutureTask实现类的支持,用于接受运算结果。FutureTask是Future接口的实现类 
     */
    
    public class TestCallable {
    	
    	public static void main(String[] args) {
    		Callable c = () -> {
    			int sum=0;
    			for(int i=0;i<=100;i++) {
    				sum+=i;
    			}
    			return sum;
    		};
    		//执行Callable方式,需要FutureTask实现类的支持,用于接受运算结果
    		FutureTask<Integer> result = new FutureTask<Integer>(c);
    		new Thread(result).start();
    		try {
    			//接受线程运算后的结果
    			Integer sum = result.get();
    			System.out.println(sum);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    }
    
    展开全文
  • 本文介绍两方面的知识: ... java提供两种创建线程的方式: 1.继承Thread private void createThread(){  new MyThread().start(); } private class MyThread extends Thread{  ...
  • Java创建线程的方式及实现

    千次阅读 2018-08-03 11:21:34
    Java创建线程的方式及实现 Java创建线程的方式主要有以下三种 继承Thread类 实现Runnable接口 实现Callable接口 继承Thead类 创建继承自Thread类的子类并重写Thread类的run方法 通过创建该子类的对象,...
  • Java中三种创建线程的方式有何区别 继承Thread类 子类继承Thread类具备多线程能力 启动线程:创建子类实例,直接调用父类Thread的start方法 缺点:OOP单继承的局限性 实现Runnable接口 实现Runnable接口具备...
  • C#中创建线程的方式,以及主线程和子线程之间的资源调用: 共享资源:new 出来的都是共享的(new 一个实例,实例中的函数、变量都是共享的) 注意:静态函数不能访问非静态函数
  • C#几种创建线程的方式

    千次阅读 2014-08-21 14:35:21
    using System; using System.Threading; namespace MutiThreadSample {  ///  /// 创建线程的方式  ///  class CreateThread  {  ///  /// 不带参数的委托  ///  
  • 前面已经学习过两种创建线程的方式了:实现Runnable接口,实现其中run方法。 继承Thread,重写其中run方法。 今天我们来认识第三种创建线程的方式,它具有返回值和可抛出异常。 Java 5.0 在 java.util.concurrent ...
  • Java线程具有并发性和异步性,可以说线程是轻量级别的进程,java中线程和现代操作系统中的进程调度都是采用...下面介绍三种Java创建线程的方式: 1. 通过继承Thread类创建线程 2. 通过实现Runnable接口来创建线程
  • Java 中有几种创建线程的方式? 如果面试中遇到这个问题,估计很多人会非常开心,然而网上的诸多答案真的对吗? 题目2: public static void main(String[] args) { Thread thread = new Thread(() -> System....
  • 第一种方式:继承Thread类并重写run()方法来创建线程 /* * 继承Thread类并重写run()方法来创建线程 * 程序启动时总是会自动的调用main()方法执行主线程,因此mian()是创建和启动线程的地方。首先创建了t1、t2、t3...
  • 创建线程的本质上只有继承Thread类 和 实现Runnable接口两种方式,其他方式如通过线程池创建线程、通过Callable 和 FutureTask创建线程、通过定时器创建线程等,其本质还是通过上述两种方式进行创建线程,他们都只...
  • 三种创建线程的方式

    2017-05-18 02:22:21
    一、创建线程的三种方式 方式1:直接new Thread()线程出来 @Test public void createThread1(){ Thread t1 = new Thread(){ public void run(){ for(int i=0;i100;i++){
  • 并发与并行、创建线程的方式、线程状态、sleep与wait、notify与notifyAll、run与start、创建线程池方式、线程安全的三大特性、死锁必要条件、Threadlocal、synchronized实现原理、synchronized与volatile的区别、...
  • 对于多线程,大家并不陌生,对于如何创建线程也是轻车熟路,对于使用new thread和实现runable接口的方式,不再多说。这篇博文我们介绍第三种:实现Callable接口。
  • Java创建线程四种方式: 1. 继承Thread类; 2. 实现Runnable接口; 3. 实现Callable接口,实例化FutureTask类; 4. 创建线程池(以下用Executor框架实现) 说明:这四种方式都潜移默化都用到了Thread类(表示线程),...
  • 这一部分仅作了解,喜欢的同学可以敲一下加深理解。 创建线程提供了三种方式,而...// 34-创建线程的方法(了解) // #import "ViewController.h" @interface ViewController () //@property (nonatomic, strong)
  • 什么是并发,线程的生命周期,线程优先级,创建线程的三种方式
  • 一、线程的概述进程:正在运行的程序,负责了这个程序的内存空间分配,代表了内存中的执行区域。 线程:就是在一个进程中负责一个执行路径。 多线程:就是在一个进程中多个执行路径同时执行。1.1 多线程的好处 ...
  • 相信大多数学过多线程的同学都知道创建线程常见的有三种方式,一种是继承Thread类,一种是实现Runnable接口,最后一种就是Callable,今天主要是对最后不常见的Callable方式进行介绍。 一、为什么要Callable接口 既然...
  • 一条线程是进程中一个单一顺序控制流,一个进程中可以并发多个线程,每条线程并行执行不同任务。 多线程是多任务一种特别形式,但多线程使用了更小资源开销。 这里定义和线程相关另一个术语 ...
  • /* * 创建线程方式一: 继承Thread类重写run()方法。启动线程用start()方法 * */class Test extends Thread {private String name;Test(String name) {this.name = name;}public void run() {for (int i = 0; i >" +...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,841
精华内容 10,736
关键字:

创建线程的方式