什么是线程?
线程(Thread)是程序内部的一条执行流程。
程序如果只有一条执行流程,那这个程序就是单线程程序。
什么是多线程?
多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。
创建线程方式一:继承Thread父类
一个类继承了Thread父类,就可以成为线程,但不过要重写run方法。
通过start方法调用,不能直接调用run方法,否则还是单线程。
例如:class MyThread extendsThread{};
MyThread p = new MyThread;
p.start();
缺点:不能继承其他类了。线程不能返回值。
创建线程方式二:实现Runnable接口
一个类实现了Runnable接口,则这个类作为对象直接传入Thread构造器中,那么就可以得到一个线程对象。
例如:
class PrimeRun implements Runnable{} PrimeRun run = new PrimeRun(); Thread thread = new Thread(run); thread.start();
也可以使用匿名内部类写法:
Thread thread1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("执行了");} });
其实就是写法不同,原理还是一样的。
缺点:还是不能能有返回值。
创建线程方式三:实现Callable接口
定义一个类实现Callable接口,重写call方法,封装要做的事情,和要返回的数据。
把Callable类型的对象封装成FutureTask(线程任务对象)。
把线程任务对象交给Thread对象。
调用Thread对象的start的方法启动线程。
线程执行完毕后、通过FutureTask对象的get的方法去获取线程任务对象执行的结果。
例如:
class MyCallable implements Callable<String>{}; MyCallable myCallable = new MyCallable(5); FutureTask<String> futureTask = new FutureTask<>(myCallable); Thread thread2 = new Thread(futureTask); thread2.start();
缺点:代码复杂。