Java多线程
2016-02-14 22:18
489 查看
介绍Java实现多线程有三种方法,如下:
·继承java.lang.Thread类
·继承java.lang.Runnable接口
·继承java.util.concurrent.Callable接口
注意:当想结束正在运行的线程时。Thread方法中的stop()方法虽然可以停止线程,但是已经被启用,还是使用变量的方式比较好。
·继承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回调相关文章推荐
- 从头认识Spring-2.3 注解装配-@autowired(5)-限定器@Qualifier(2)
- java并行编程
- JAVA与C#的区别
- 从头认识Spring-2.3 注解装配-@autowired(5)-限定器@Qualifier(1)
- 线程基础:JDK1.5+(9)——线程新特性(中)
- 有关eclipse for java ee版本遇到的坑( Context initialization failed)
- eclipse中离线安装genymotion插件
- Spring+Quartz(定时任务)
- JVM如何判断对象是否需要被回收
- 一个简单的springmvc-mybatis项目,新闻网站
- eclipse卸载自带maven
- eclipse卸载自带maven
- 【JAVA】9、表达式类型的转换
- java定时删除文件夹及文件
- 从头认识Spring-2.3 注解装配-@autowired(4)-required(2)
- spring的ioc简述
- 【JAVA】8、简洁表达式
- 初窥JAVA底层————System.out.println("Hello World");
- Spring核心组件
- Spring MVC 系列(一)——Spring MVC核心组件及工作流程解析