您的位置:首页 > 编程语言 > Java开发

Java多线程

2016-02-14 22:18 489 查看
介绍Java实现多线程有三种方法,如下:

         ·继承java.lang.Thread类

         ·继承java.lang.Runnable接口

         ·继承java.util.concurrent.Callable接口

1、继承Thread类。覆写run方法执行数据

public class ThreadTest extends Thread {
public static void main(String[] args) {
new ThreadTest().start();
}
@Override
public void run() {
System.out.println("--线程启动--");
}
}

2、继承Runnable接口

使用基本和Thread相同,但是启动不同。

public class RunnableTest implements Runnable {
public static void main(String[] args) {
new Thread(new RunnableTest ()).start();
}
@Override
public void run() {
System.out.println("--线程启动--");
}
}

注意:当想结束正在运行的线程时。Thread方法中的stop()方法虽然可以停止线程,但是已经被启用,还是使用变量的方式比较好。

public class RunnableTest implements Runnable {
private boolean flag=true;
public static void main(String[] args) throws InterruptedException {
RunnableTest runnable=new RunnableTest();
Thread thread=new Thread(runnable);
thread.start();
Thread.sleep(1000);
runnable.setFlag(false);
}
@Override
public void run() {
while(flag){
System.out.println("--线程启动--");
}
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}

3、继承Callable接口

 继承java.util.concurrent.Callable,启动后会调用其call()方法,与Runnable不同的是call()方法可以返回值。很少使用到,不知道以后会不会有需求

public class CallbackTest implements Callable<String> {
public static void main(String[] args) {
CallbackTest ct=new CallbackTest();
FutureTask<String> task=new FutureTask<String>(ct);
Thread thread=new Thread(task);
thread.start();
try {
System.out.println(task.get());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
Thread.sleep(3000);
System.out.println("执行完毕");
return "返回";
}
}

4、总结

  Thread和Runnable实现多线程操作相同,Thread也是通过继承Runnable接口的。但是在使用的时候,由于Java单继承的特性,在使用Thread后无法继承其他类,推荐使用继承Runnable接口。Callable的使用暂时不了解,个人感觉不好用。另外线程间通信可以使用回调机制,有兴趣可以参见本人博客中Java回调
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: