Java线程创建
来源:互联网 发布:sm2算法 编辑:程序博客网 时间:2024/05/22 00:20
Java语言中的线程系统是自建的,有专门支持多线程的API,所以我们可以快速地编写一个支持线程的程序。
我们通常可以通过继承类Thread和实现Runnable接口这两种方法来创建线程。实现线程,最重要的是实现其中的run方法。
1.继承Thread类创建线程
2.实现Runnable接口创建线程
public class ThreadTest {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubThread threadA = new Thread(new MyRunnable("A"));MyThread threadB = new MyThread("B");threadA.start();threadB.start();}}class MyThread extends Thread {private String name;public MyThread(String n) {name = n;}@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();for (int i = 0; i < 5; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("access: " + name);}}}class MyRunnable implements Runnable {private String name;public MyRunnable(String n) {name = n;}@Overridepublic void run() {// TODO Auto-generated method stubfor (int i = 0; i < 5; i++) {try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("access: " + name);}}}
3.两种创建线程方法的比较
Thread是Java已经严格封装好的类,在面向对象思想中,继承这样的类并修改或者扩充它并不是十分可取,因为可能出现认为失误,对一个类进行继承修改或扩充将可能导致该子类出现不可预料的错误。
另外,由于Java不支持多重继承,一个继承了Thread的类将无法再继承其他类,因为在某些情况下只能采用实现Runnable的方式,例如要实现多线程的Applet则必须通过实现Runnable创建线程。
实现Runnable方式的缺点在于,在run()方法中如果要调用当前线程自身的方法,必须先通过调用Thread.currentThread()以获得对当前线程自身的引用,而在继承自Thread方式时,可以直接调用当前线程自身的方法,后者为代码的编写带来一个一定的便利,但这点便利与上述可能造成的不可预料的错误相比,不具有太大的意义。因此如果没有绝对的把握保证继承Thread类的子类的正确性和完整性,建议采用实现Runnable的方式创建线程。
然而,实现Runnable方式并不一定总是最好的,例如要获得拥有特殊功能的线程必须通过继承并扩充Thread实现,此时若对Thread类的修改或扩充并不大,并希望保证其正确性和完整性,则更应该采用继承Thread的方式。
在实际应用中,应该根据实际情况,权衡两种方式带来的影响,选择最合适的方式。
- Java 线程创建
- java创建线程池
- java创建线程池
- Java创建线程
- 创建Java线程池
- java线程的创建
- java 创建线程
- 创建Java线程池
- 创建java线程池
- Java线程创建方式
- 创建Java线程池
- Java线程创建
- 创建Java线程池
- 创建Java线程池
- JAVA 创建线程池
- Java线程的创建
- Java线程创建方法
- Java - 多线程 - 创建线程
- liunx学习日记
- [编程珠玑]可变长位字符串的排序问题
- 贴片元件封装--SMT基础知识介绍
- Linux 命令大全
- 使用iOS系统中的编辑联系人界面,其中的思路值得借鉴(继承的思想)
- Java线程创建
- 算法导论学习笔记--2--堆排序
- mongo基本操作
- IntelliJ Idea导出javadoc乱码解决方案
- 面试题01 - 二叉树的镜像 【树】[ water ]
- 百度地图API使用
- C++之父文章1:How do I write this very simple program?
- 畅通工程续 最短路径 Dijkstra
- Linux 内核 Makefile 体系简单分析