java 实现多线程的方法总结

网友投稿 230 2023-07-04


java 实现多线程的方法总结

java 实现多线程的三种方法

在java中,有三种方法可以实现多线程。第一种方法:继承Thread类,重写run函数。第二种方法:实现Runnable接口,重写run函数。第三种方法:实现Callable接口,重写call函数。本文章将通过实例讲解这三种方法如何实现多线程。需要的可以参考一下。

(1)继承Thread类,重写run函数。

class xx extends Thread{

public void run(){

Thread.sleep(1000) //线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源

}}

开启线程:

对象.start()    //启动线程,run函数运行

(2)实现Runnable接口,代码如下

class MyThread implements Runnable {

private String name;

public MyThread(String name) {

super();

this.name = name;

}

@Override

public void run() {

for(int i = 0 ; i < 200; i++) {

System.out.println("Thread"+name+"--->"+i);

}

}

}

public class ThreadDemo {

public static void main(String[] args) {

MyThread a = new MyThread("a");

MyThread b = new MyThread("b");

MyThread c = new MyThread("c");

new Thread(a).start();

new Thread(b).start();

new Thread(c).start();

}

}

(3)实现Callable接口,重写call函数

Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。

Callable和Runnable有几点不同:

Callable规定的方法是call(),而Runnable规定的方法是run().

Callable的任务执行后可返回值,而Runnable的任务是不能返回值的

call()方法可抛出异常,而run()方法是不能抛出异常的。

运行Callable任务可拿到一个Future对象,Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果.通过Future对象可了解任务执行情况,可取消任务的执行,还可获取任务执行的结果

Java  Callable 代码示例:

class TaskWithResult implements Callable {

private int id;

public TaskWithResult(int id) {

this.id = id;

}

@Override

public String call() throws Exception {

return "result of TaskWithResult " + id;

}

}

public class CallableTest {

public static void main(String[] args) throws InterruptedException,

ExecutionException http://{

ExecutorService exec = Executors.newCachedThreadPool()njsCG;

ArrayListnjsCG> results = new ArrayList>(); //Future 相当于是用来存放Executor执行的结果的一种容器

for (int i = 0; i < 10; i++) {

results.add(exec.submit(new TaskWithResult(i)));

}

for (Future fs : results) {

if (fs.isDone()) {

System.out.println(fs.get());

} else {

System.out.println("Future result is not yet complete");

}

}

exec.shutdown();

}

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java 装饰模式(Decorator Pattern)详解及实例代码
下一篇:KVM虚拟化技术之使用Qemu
相关文章

 发表评论

暂时没有评论,来抢沙发吧~