多线程怎么实现,分别有什么特点
继承thread类、实现runnable接口、实现callable接口
继承thread类的类创建的对象就是线程对象,可以直接start();
实现runnable接口的类创建的对象是个target,要作为参数放在创建thread对象里,正因为是个参数,所以可以放到多个创建的thread对象里,实现多个相同的线程对一个资源的操作,然后java单继承,实现接口可以防止子类需要创建线程没办法继承类
3、实现callable接口,重写call()方法,可以有返回值,使用futuretask对象接收返回值,再用futuretask的get()得到返回值
Callable<Integer> t=new thread1();
FutureTask<Integer> futureTask=new FutureTask<>(t);
new Thread(futureTask).start();
int a=futureTask.get();
借助线程池来执行
ExecutorService exe= Executors.newCachedThreadPool();
FutureTask<Integer> futureTask= (FutureTask<Integer>) exe.submit(new thread1());
int a=futureTask.get();
还可以用futuretask类型的集合获得很多返回值
继承thread类、实现runnable接口、实现callable接口
继承thread类的类创建的对象就是线程对象,可以直接start();
实现runnable接口的类创建的对象是个target,要作为参数放在创建thread对象里,正因为是个参数,所以可以放到多个创建的thread对象里,实现多个相同的线程对一个资源的操作,然后java单继承,实现接口可以防止子类需要创建线程没办法继承类
3、实现callable接口,重写call()方法,可以有返回值,使用futuretask对象接收返回值,再用futuretask的get()得到返回值
Callable<Integer> t=new thread1();
FutureTask<Integer> futureTask=new FutureTask<>(t);
new Thread(futureTask).start();
int a=futureTask.get();
借助线程池来执行
ExecutorService exe= Executors.newCachedThreadPool();
FutureTask<Integer> futureTask= (FutureTask<Integer>) exe.submit(new thread1());
int a=futureTask.get();
还可以用futuretask类型的集合获得很多返回值
全部评论
相关推荐
06-30 08:52
广东食品药品职业学院 C++ 
点赞 评论 收藏
分享