Thread和Runnable创建线程
来源:互联网 发布:nmt tensorflow 编辑:程序博客网 时间:2024/05/22 01:46
一 线程创建
在java中,创建线程有两种方式:
(1) 通过继承Thread类,重写run方法
(2) 通过实现Runnable接口,实现run方法
1. 通过继承Thread类,重写run方法
Thread类源码结构:
public class Thread implements Runnable {
// .....省
}
该类实现Runnable接口,在Runnable接口基础上增加了方法和属性。
eg:
package com.lanhuigu.JavaBase.thread.createthread;/** *通过继承Thread类,重写run方法,创建线程 */public class MyThread extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("通过继承Thread类创建线程");}public static void main(String[] args) {MyThread thread1 = new MyThread();thread1.start();System.out.println("多线程技术--代码运行结果与代码执行顺序或调用顺序无关");}}程序运行结果如下:
从运行结果,可以知道,代码的运行结果与代码执行顺序或代码调用顺序无关。
线程虽然先启动,但是线程下面的代码确先执行完。
使用继承Thread类创建线程的好处就是在Thread类中已经封装了各种方法,
方便我们编程。
缺点就是在一个已经拥有父类的类中无法通过继承Thread的方式创建线程,
因为java不支持多继承。
2. 通过实现Runnable接口,实现run方法
实现Runnable接口创建完Runnable对象后,如何创建线程?
Thread类API构造方法如下:
从构造方法可以看出,将创建完的Runnable对象,通过Thread类的构造方法,就能分配新的线程对象。
eg:
package com.lanhuigu.JavaBase.thread.createthread;/** * 通过实现Runnable接口,实现run方法,创建线程 */public class MyRunnable implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("通过实现Runnable接口创建线程");}public static void main(String[] args) {MyRunnable runnable = new MyRunnable();Thread thread1 = new Thread(runnable);thread1.start();System.out.println("多线程技术--代码运行结果与代码执行顺序或调用顺序无关");}}使用Runnable的好处在于可以在多态中创建线程,当一个类已经有一个父类,
需要在这个类上创建线程时,就不能通过继承Thread类创建线程,因为java不支持多继承,
只能通过实现Runnable接口创建线程。
不完美的就是我们不能用Thread类中的某些已经封装好的方法。
注:
(1) Thread和Runnable创建多线程方式在本质上没有区别。
(2) 多次调用start方法,将会抛出IllegalThreadStateException。
二 Thread类中某些方法
1. currentThread
Thread类中的currentThread()方法,返回当前的线程对象
eg:
package com.lanhuigu.JavaBase.thread.generalmethod;/** * Thread类中的currentThread()方法,返回当前的线程对象 */public class CurrentThreadMethod extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("ThreadName = " + Thread.currentThread().getName());}public static void main(String[] args) {CurrentThreadMethod currentThreadMethod = new CurrentThreadMethod();currentThreadMethod.start();}}
2. sleep
Thread类中的sleep(long millis)方法让当前正在执行的线程休眠指定毫秒数
eg:
package com.lanhuigu.JavaBase.thread.generalmethod;/** * Thread类中的sleep(long millis)方法让当前正在执行的线程休眠指定毫秒数 */public class SleepMethod extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubtry {System.out.println("ThreadName = " + Thread.currentThread().getName()+ " begin time = " + System.currentTimeMillis());Thread.sleep(3000);// 休眠3000毫秒(3秒)System.out.println("ThreadName = " + Thread.currentThread().getName()+ " end time = " + System.currentTimeMillis());} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {SleepMethod sleepThread = new SleepMethod();sleepThread.start();}}
3. getId
获取线程id
package com.lanhuigu.JavaBase.thread.generalmethod;/** * 获取线程id */public class GetIdMethod extends Thread{@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("线程ID=" + Thread.currentThread().getId());}public static void main(String[] args) {GetIdMethod getIdThread = new GetIdMethod();getIdThread.start();}}
- 线程创建Thread和Runnable
- Thread和Runnable创建线程
- 线程(Thread) 和 Runnable
- 线程--Thread和Runnable创建线程的区别
- Runnable和Thread两种方式创建线程的比较
- java创建线程implement runnable 和 extends thread 比较
- 7.4Java创建线程(Runnable接口和Thread类)
- java创建线程implement runnable 和 extends thread 比较
- 深入理解JAVA创建线程的方法Thread和Runnable
- Java创建线程(Runnable接口和Thread类)
- Java创建线程(Runnable接口和Thread类)
- 创建线程继承Thread和实现Runnable接口
- 源码分析继承Thread和实现Runnable来创建线程
- Thread 和 Runnable创建新线程的区别,Runnable可以共享线程类的实例属性
- 创建线程的方法 Thread Runnable
- 线程的创建(Runnable,Thread)
- Java线程总结(一):创建线程的两种方式Thread和Runnable
- 多线程Runnable和Thread产生线程
- MATLAB的数组查找函数find以及元胞数组
- hdu 3342 Legal or Not
- Jsoup采集百度新闻内容,网页显示并实时更新
- openssh-server
- 算法竞赛入门经典 UVa213 Message Decoding
- Thread和Runnable创建线程
- hdu 2094 产生冠军
- ==与equals方法区别
- 一点拙见
- Arpa’s obvious problem and Mehrdad’s terrible solution
- hdu 4324 Triangle LOVE
- mysql 1055错误
- 通过修改系统文件添加一个可登陆用户
- hdu 1213 How Many Tables