线程状态,开启子线程的3种方式(Callable)
(理理基础是很有必要的)
先看一张非常好的图
注意,当你start一个线程,他只是处于可运行状态,不一定会立刻执行,这取决于操作系统分配给你的时间
创建方式1,继承Thread
class MyThread extends Thread { @Override public void run() { //do some thing in the 子线程 System.out.print("lalala"); } }
MyThread m = new MyThread(); m.start();
创建方式2,实现Runnable接口
class MyThread implements Runnable { @Override public void run() { //do some thing in the 子线程 System.out.print("lalala"); } }
Thread t = new Thread(new MyThread()); t.start();
可以这样简写
new Thread(new Runnable() { @Override public void run() { //do some thing in the 子线程 System.out.print("lalala"); } }).start();
实现Callable接口,重写call()方法
class MyCallable implements Callable<String> { @Override public String call() throws Exception { //do something here,and return your result,我们假设取得的是"武林外传" return "武林外传"; } }
MyCallable mCallable = new MyCallable(); ExecutorService mExecutorService = Executors.newSingleThreadExecutor(); Future<String> mFuture = mExecutorService.submit(mCallable); try { Log.i("xbh", mFuture.get()); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); }Callable可以在任务完成后提供一个返回值,采用泛型,可以指定类型,我们这里指定的是String
call()可以抛出异常
运行Callable可以拿到一个Future对象,子线程真正的执行是mFuture.get()这句话
以上3种方法,见仁见智,都挺不错的,不是说一定没rxjava好