java多进程还是多线程,什么叫多线程?Java支持多线程有何意义
java是多线程的,使用多线程有三种方法:继承Thread类、实现Runnable接口和使用Callable和Future创建线程。
如何解决写爬虫IP受阻的问题?立即使用。
继承Thread类(推荐学习:java课程)
实现非常简单。你只需要创建一个类来继承Thread类,然后重写run方法。通过调用main方法中类实例对象的start方法,可以实现多线程并发。代码:
公共类MyThread扩展线程{
@覆盖
公共无效运行(){
super . run();
System.out.println(执行子线程.);
}
}测试用例:
公共类测试{
公共静态void main(String[] args) {
MyThread MyThread=new MyThread();
myth read . start();
System.out.println(主线程.);
}
}运行结果:
实现Runnable接口
这个方法的实现也很简单,就是把Thread类的继承改为Runnable接口的实现。代码如下:
公共类MyRunnable实现Runnable {
@覆盖
公共无效运行(){
System.out.println(执行子线程.);
}
}测试用例:
公共类测试{
公共静态void main(String[] args) {
runnable runnable=new my runnable();
Thread thread=新线程(runnable);
thread . start();
System.out.println(主线程完成了!);
}
}运行结果:
使用Callable和Future创建线程
上面的两种方式都有这两个问题:
无法获取子线程的返回值。
run方法不能引发异常。
为了解决这两个问题,我们需要使用可调用接口。说到接口,上面的runnable接口实现类实例作为Thread类的构造函数的参数传入,然后通过Thread的启动执行Run方法中的内容。但是,Callable不是Runnable的子接口,而是一个全新的接口。它的实例不能直接传入线程结构,所以需要另一个接口进行转换。
以这里面其实就是要比上一个方法再多一个转换过程,最终一样是通过Thread的start来创建新线程。有了这个思路,代码就很容易理解了:
导入Java . util . concurrent . callable;
公共类MyCallable实现Callable {
int I=0;
@覆盖
公共对象调用()引发异常{
system . out . println(thread . current thread()的值。getname() I: I);
返回I;//调用方法可以有返回值
}
}测试:
导入Java . util . concurrent . callable;
导入Java . util . concurrent . future task;
公共类测试{
公共静态void main(String[] args) {
callable callable=new my callable();
for(int I=0;i 10i ) {
FutureTask task=new FutureTask(可调用);
新线程(任务,“子线程”I)。start();
尝试{
//获取子线程的返回值
System.out.println(子线程返回值: task . get() \ n );
} catch(异常e) {
e . printstacktrace();
}
}
}
}执行结果(部分):
这就是java多线程的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。