Java 多线程详解

一、线程和进程

线程和进程的区别是啥呢?
一个进程就好比打开一个软件应用,但这个软件应用可能含有多个线程。
当然也有可能打开一个软件应用会同时进行多个进程,每个进程也有可能有多个线程。

二、多线程的几种方式

一般来说面试时会问多线程的三种方式分别是什么:
1、继承Thread类
2、实现Runnable接口
3、实现Callable接口
有时面试官也会问多线程的四种方式分别是什么:
那第四种方式就是线程池方式。

三、继承Thread类方式

package day1112;

// 继承Thread类
// 重写run方法
// 创建Thread子类对象
// 调用start方法


public class Runner1 extends Thread {
    //重写run方法
    @Override
    public void run(){
        for(int i = 0;i<10;i++)
            System.out.println("Runner hello world !"+i);
    }

    public static void main(String[] args) {
        Runner1 r = new Runner1();
        r.start();//多线程调用
        r.run();//方法调用
        for(int i = 0;i<10;i++){
            System.out.println("main"+i);
        }

    }

}

四、实现Runnable接口

package day1112;

//实现Runnable接口
//重写run方法
//创建实现类对象
//创建Thread对象,Runnable对象作为构造方法的实参
//调用start()方法

public class Runner2 implements Runnable{
    @Override
    public void run(){
        for(int i = 0;i<10;i++) {
            System.out.println("runner"+i);
        }
    }

    public static void main(String[] args) {
        Runner2 r = new Runner2();
        Thread t = new Thread(r);
        t.start();
        for(int i = 0;i<10;i++){
            System.out.println("main方法"+i);
        }
    }
}

五、实现Callable接口

package day1112;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

//实现callable接口
//重写call方法
//创建Callable子类的实现类对象
//创建FutureTask对象,Callable对象作为构造方法实参
//创建Thread对象,FutureTask对象作为构造方法实参
//调用start()方法

class Testing{
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Runner3 r1 = new Runner3();
        Runner3 r2 = new Runner3();
        FutureTask ft1 = new FutureTask(r1);
        FutureTask ft2 = new FutureTask(r2);
        Thread t1 = new Thread(ft1);
        Thread t2 = new Thread(ft2);
        t1.start();//t1.start();//一个线程重复调用start方法编译器通过,运行期报异常IllegalThreadStateException
        t2.start();
        Integer a1 = (Integer) ft1.get();
        Integer a2 = (Integer) ft2.get();
        System.out.println("a1="+a1);
        System.out.println("a2="+a2);

    }
}

public class Runner3 implements Callable<Integer> {

    private int number = 20;
    @Override
    public Integer call() throws Exception{
        int result;
        while(number >0){
            System.out.println("还有雪地:"+number+"平方米未清扫");
            number --;
        }
        return number;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值