Java创建多线程的两种方式对比
2015-07-15 14:41
429 查看
在Java中创建线程的方式有两种,第一种是直接继承Thead类,另一种是实现Runable接口。那么这两种方式孰优孰劣呢?这就是本文需要探讨的内容范畴了,看官们请仔细向下看
采用继承Thead类实现多线程:
优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread()方法。
劣势:因为这种线程类已经继承了Thead类,所以不能再继承其它类。
示例代码:
复制代码 代码如下:
package org.frzh.thread;
public class FirstThread extends Thread{
private int i;
//重写run方法,run方法的方法体就是线程执行体
public void run() {
for (; i < 100; i++) {
//当线程类继承Thread类时,可以直接调用getName方法获得当前线程名
//如果想获得当前线程,直接使用this
//Thread对象的getName方法返回当前线程的名字
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
//调用Thead的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName() + " " +i);
if (i == 20) {
new FirstThread().start();
new FirstThread().start();
}
}
}
}
运行结果片段:
我们发现,在两个子线程中i的值并不连续,似乎与我们说的子线程直接共享数据不符。其实,在这里我们实例化了两个子线程,每个拥有自己的实例变量i。
采用实现Runable接口的多线程:
优势:线程类只是实现了Runable接口,因此还可以继承其他类;
在这种情况下,可以使多个线程共享一个target对象,所以非常适合多个线程用来处理同一份资源的情况,从而可以将cpu、代码和数据分开,形成清晰的模型,较好的体现面向对象思想。
劣势:编程略有些复杂,如果要访问当前线程必须使用Thread.currentThread方法。
示例代码:
复制代码 代码如下:
package org.frzh.thread;
public class SecondThread implements Runnable{
private int i;
@Override
public void run() {
// TODO Auto-generated method stub
for (; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
if (i == 20) {
SecondThread st = new SecondThread();
new Thread(st, "子线程1").start();
new Thread(st, "子线程2").start();
}
}
}
}
运行结果片段:
可以看到,此时的i值是连续变化的,因为线程1和2共享同一个target。
相关文章推荐
- java多线程编程之捕获子线程异常示例
- java 抓取网页内容小工具
- Scheme 4 Javaer-3.高阶函数
- 接口interface
- java基本教程之线程休眠 java多线程教程
- java基本教程之java线程等待与java唤醒线程 java多线程教程
- 浅析Java中Map与HashMap,Hashtable,HashSet的区别
- 例子分析java.util.concurrent.ExecutorService
- java 获取当前时间前7天的日期
- Spring3 MVC请求参数获取的几种方法[转]
- final关键字
- java多线程详细总结
- Java中Comparable和Comparator实现对象比较
- JAVA多线程Thread和Runnable的实现
- java向多线程中传递参数的三种方法详细介绍
- java实现文本和文件的压缩和解压缩
- super关键字
- JAVA常用快捷键
- 打开eclipse中文件所在目录
- Java多线程的用法详解