多线程基础之创建方式。

前言

    面试造火箭,入职拧螺丝。用不用的到,面试基本都会问多线程相关知识。
    此文,用以介绍线程的创建方式,仅仅是小小的demo,具体使用需要根据业务需求斟酌具体怎么玩,不过正常工作都是用线程池的,后面单独写一篇关于线程池的理解。

1.run和start

    我相信有不少初学者和我刚学的时候一样,很懵逼,为啥不调用run方法,而要调用start呢?
    答:run方法只是Thread的一个普通方法,你直接调用的话,仅仅是调用一个方法,不会开辟一个线程;start方法底层是调用了native的start0,也就是说调用了本地方法去开辟一个线程,其实是native方法回调run方法的。

public synchronized void start() {
      	...
            start0();
            started = true;
		...
}

private native void start0();

2.创建方式

方式一:继承Thread类,重写run方法

public class TestThread {
    public static void main(String[] args) {
    	//创建线程对象
        Thread myThread = new MyThread();
        myThread.start();
    }
}
//继承Thread
class MyThread extends  Thread{
    @Override
    public void run() {
        super.run();
        System.out.println("This is myThread");
    }
}

方式二:实现Runnable类,重写run方法

public class TestThread {
    public static void main(String[] args) {
    	//创建Runnable子类
        MyThread mt = new MyThread();
        //创建线程
        Thread myThread = new Thread(mt);
        myThread.start();
    }
}
//实现Runnable接口
class MyThread implements Runnable{
    @Override
    public void run() {
        System.out.println("This is myRunnable");
    }
}

方式三:实现Callable 类,重写call方法

public class TestThread {
    public static void main(String[] args) {
        //创建callable对象
        MyThread mt = new MyThread();
        //创建“未来”对象
        FutureTask task = new FutureTask(mt);
        //创建线程
        Thread myThread = new Thread(task);
        myThread.start();
    }
}
//实现Callable 
class MyThread implements Callable {
    @Override
    public Object call() throws Exception {
        System.out.println("This is myCallable");
        return null;
    }
}

    FutureTask 是一个可取消的异步计算,感兴趣的同志可以自己去百度看看,这里不做过多介绍了。JDK8还有其他有意思的Future供你玩。

    实现Callable和Runnable的区别你发现了吗?可以根据业务需求斟酌具体怎么玩。

总结

    线程的创建方式看demo比较简单,在工作中一般不是这样创建的,但是要这些基础知识也必须要掌握。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值