美文网首页
线程创建

线程创建

作者: 忘净空 | 来源:发表于2016-12-16 10:55 被阅读11次

为什么要使用多线程

以前单任务的操作系统,当系统处理耗时的I/O操作的时候也是占用CPU,这种情况下系统的效率很低,现在使用多任务的操作系统,当一个任务处理耗时的操作时,CPU可以腾出来给别的任务,这样的话,CPU的利用率明显提高。好比,以前早上我们先洗漱,然后再去用电饭煲煮稀饭,现在我们可以一边用电饭煲煮稀饭,一边洗漱,等洗漱完直接吃热气腾腾的早餐,这样充分利用了我们有限的时间。

如何创建线程

  1. 继承Thread类

  2. 实现Runable接口

  3. 实现Callable接口

问题

  1. 继承Thread类和实现Runable接口或实现Callable接口创建线程的区别?

    其实是问接口和继承的区别:简单一句话:优先使用接口,如果既要定义子类的行为,又要为子类提供公共的方法则使用继承。

  2. 实现Runable接口和实现Callable接口的区别
    首先我们看一下这个两个接口的定义:

public interface Callable<V> {
    V call() throws Exception;
}

public interface Runnable {
    public abstract void run();
}

从接口定义可以看出:

  1. Callabe使用call()方法,Runable使用run方法

  2. call()又返回值,run()没有

  3. call()可以抛出受检查的异常,比如ClassNotFoundException,而run()不能抛出受检查的异常

  4. Thread的没有接受Callable的构造方法,使用Callable时需要FutureTask包装。

如何启动线程:

调用start方法

创建线程的Demo

/**
 * 继承Thread类创建线程
 */
public class CreateThread1 extends Thread {
    public static void main(String[] args) {
        CreateThread1 thread1 = new CreateThread1();
        //启动线程
        thread1.start();
    }

    @Override
    public void run() {
        System.out.println("我是继承Thread类创建线程");
    }
}

/**
 * 实现Runnable接口创建线程(写法1)
 */
public class CreateThread2 {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyThread());
        thread.start();
    }
}

class MyThread implements Runnable {
    public void run() {
        System.out.println("实现Runnable接口创建线程");
    }
}

/**
 * 实现Runnable接口创建线程(写法2)
 */
public class CreateThread2 {
    public static void main(String[] args) {
        new Thread(new Runnable() {
            public void run() {
                System.out.println("实现Runnable接口创建线程");
            }
        });
    }
}

public class CallableTest implements Callable<String> {
    public static void main(String[] args) throws Exception {
        FutureTask futureTask = new FutureTask(new CallableTest());
        new Thread(futureTask).start();
        System.out.println("线程开始执行");
        String result = (String) futureTask.get();
        System.out.println(result);
    }

    @Override
    public String call() throws Exception {
        Thread.sleep(1000);
        return "执行完成";
    }
}

相关文章

  • Java 多线程之线程的创建及其使用

    一、创建线程以及启动线程 二、停止线程 三、线程类中函数详解 一、创建线程以及启动线程 创建线程:Java中创建线...

  • 多线程

    创建一个多线程 创建多线程-继承线程类 创建多线程-实现Runnable接口 创建多线程-匿名类code

  • iOS 多线程-NSThread

    1. 创建和启动线程 创建、启动线程 2. 其他创建线程方式 创建线程后自动启动线程[NSThread detac...

  • Day19——threading

    一、导入线程库 二、创建子线程 函数创建线程 Thread(target,args) - 创建子线程对象说明...

  • 创建线程的几种方法

    直接创建 创建线程后自动启动 创建后台线程

  • 多线程编程之NSThread

    NSThread创建线程很简单,管理线程很困难 一、创建线程 1、创建线程对象,调用start方法执行线程 NST...

  • 多线程--精通ThreadPoolExecutor

    前言 在多线程开发中,应该避免显式创建线程,而是采用线程池里面的线程。使用线程池可以减少手动创建线程,减少线程创建...

  • Java 必备面试代码

    1. Thread 创建线程 2. Runnable 创建线程 使用线程池创建多线程Callable 4. 基于线...

  • 3.多线程基础(三)NSThead使用

    1.NSThread创建新线程: 创建线程之后是默认不执行的状态 创建线程设置线程的属性 2.NSThread创建...

  • java 创建线程的几种方式

    继承Thread类创建线程类 通过Runable接口创建线程类 通过Callable和FutureTask创建线程...

网友评论

      本文标题:线程创建

      本文链接:https://www.haomeiwen.com/subject/fmrnmttx.html