好记性不如赖笔头…………
创建线程有两种方式:
1、 继承Thread类,重写run方法,run方法内部写入线程执行的具体代码,创建线程时代码如下:
//创建线程
Thread thread = new Thread;
//启动线程
thread.start();
2、 实现Runnable接口,重写run方法,run方法内部写入线程执行的具体代码,创建线程时,代码如下
//假设Demo类实现了Runnable接口,创建线程的方式如下:
Demo demo = new Demo();
Thread thread = new Thread(demo);
//启动线程:
thread.start();
//上面的代码可以简写为
Thread thread = new Thread(new Demo());
thread.start();
注意:启动线程时使用的是start()方法,而不是run(),如果使用的是run(),并没有启动线程,而是直接执行的run()方法而已。
-------------------------------------------------------------------------第一种线程创建方式-------------------------------------------------------------------------
package com.Ckinghan.thread;
/**
* @描述:第一种线程创建方式,继承Thread类,重写run方法,在run方法中,写入线程的具体执行过程
* @创建时间:
*/
public class FirstThread extends Thread {
@Override
public void run() {
for(int i = 0; i < 30; i ++){
System.out.println(this.getName()+"--HelloThread---"+i);
}
}
}
-------------------------------------------------------------------------第二种线程创建方式-------------------------------------------------------------------------
package com.Ckinghan.thread;
/**
* @描述:第二种线程创建方式,实现Runnable接口,重写run方法,在run方法中,写入线程的具体执行过程
* @创建时间:
*/
public class FirstThread2 implements Runnable {
@Override
public void run() {
for(int i = 0; i < 30; i++){
System.out.println(Thread.currentThread().getName()+"--HelloThread2---"+i);
}
}
}
-------------------------------------------------------------------------测试启动线程-------------------------------------------------------------------------
package com.Ckinghan.thread;
public class FirstThreadDemo {
public static void main(String[] args) {
/**
* 第一种线程创建方式,继承Thread类,重写run方法,在run方法中,写入线程的具体执行过程
*/
createFirstThread();
/**
* 第二种线程创建方式,实现Runnable接口,重写run方法,在run方法中,写入线程的具体执行过程
*/
createFirstThread2();
}
/**
* @描述:第二种线程创建方式,实现Runnable接口,重写run方法,在run方法中,写入线程的具体执行过程
* @创建时间:
*/
public static void createFirstThread2(){
//创建第一个线程
Thread thread = new Thread(new FirstThread2());
thread.setName("第二种线程1:");
thread.start();
//创建第二线程
Thread thread1 = new Thread(new FirstThread2());
thread1.setName("第二种线程2:");
thread1.start();
}
/**
* @描述:第一种线程创建方式,继承Thread类,重写run方法,在run方法中,写入线程的具体执行过程
* @创建时间:
*/
public static void createFirstThread(){
//创建并启动第一个线程
FirstThread firstThread = new FirstThread();
firstThread.setName("第一种线程1:");
firstThread.start();
//创建并启动第二个线程
FirstThread firstThread2 = new FirstThread();
firstThread2.setName("第一种线程2:");
firstThread2.start();
}
}
*********************执行结果:
第一种线程1:--HelloThread---0
第一种线程1:--HelloThread---1
第一种线程1:--HelloThread---2
第一种线程1:--HelloThread---3
第一种线程1:--HelloThread---4
第二种线程2:--HelloThread2---0
第一种线程1:--HelloThread---5
第一种线程1:--HelloThread---6
第一种线程1:--HelloThread---7
第一种线程1:--HelloThread---8
第一种线程1:--HelloThread---9
第一种线程1:--HelloThread---10
第一种线程1:--HelloThread---11
第一种线程1:--HelloThread---12
第一种线程1:--HelloThread---13
第一种线程1:--HelloThread---14
第一种线程1:--HelloThread---15
第一种线程1:--HelloThread---16
第一种线程1:--HelloThread---17
第一种线程1:--HelloThread---18
第一种线程1:--HelloThread---19
第一种线程1:--HelloThread---20
第一种线程1:--HelloThread---21
第一种线程1:--HelloThread---22
第一种线程1:--HelloThread---23
第一种线程1:--HelloThread---24
第一种线程1:--HelloThread---25
第一种线程1:--HelloThread---26
第一种线程1:--HelloThread---27
第一种线程1:--HelloThread---28
第一种线程1:--HelloThread---29
第二种线程1:--HelloThread2---0
第二种线程1:--HelloThread2---1
第二种线程1:--HelloThread2---2
第二种线程1:--HelloThread2---3
第二种线程1:--HelloThread2---4
第二种线程1:--HelloThread2---5
第二种线程1:--HelloThread2---6
第二种线程1:--HelloThread2---7
第二种线程1:--HelloThread2---8
第二种线程1:--HelloThread2---9
第二种线程1:--HelloThread2---10
第二种线程1:--HelloThread2---11
第二种线程1:--HelloThread2---12
第二种线程1:--HelloThread2---13
第二种线程1:--HelloThread2---14
第二种线程1:--HelloThread2---15
第二种线程1:--HelloThread2---16
第二种线程1:--HelloThread2---17
第二种线程1:--HelloThread2---18
第二种线程1:--HelloThread2---19
第二种线程1:--HelloThread2---20
第二种线程1:--HelloThread2---21
第二种线程1:--HelloThread2---22
第二种线程1:--HelloThread2---23
第二种线程1:--HelloThread2---24
第二种线程1:--HelloThread2---25
第二种线程1:--HelloThread2---26
第二种线程1:--HelloThread2---27
第二种线程1:--HelloThread2---28
第一种线程2:--HelloThread---0
第一种线程2:--HelloThread---1
第一种线程2:--HelloThread---2
第一种线程2:--HelloThread---3
第一种线程2:--HelloThread---4
第一种线程2:--HelloThread---5
第一种线程2:--HelloThread---6
第一种线程2:--HelloThread---7
第一种线程2:--HelloThread---8
第一种线程2:--HelloThread---9
第一种线程2:--HelloThread---10
第一种线程2:--HelloThread---11
第一种线程2:--HelloThread---12
第一种线程2:--HelloThread---13
第一种线程2:--HelloThread---14
第一种线程2:--HelloThread---15
第一种线程2:--HelloThread---16
第一种线程2:--HelloThread---17
第一种线程2:--HelloThread---18
第一种线程2:--HelloThread---19
第一种线程2:--HelloThread---20
第一种线程2:--HelloThread---21
第一种线程2:--HelloThread---22
第一种线程2:--HelloThread---23
第一种线程2:--HelloThread---24
第一种线程2:--HelloThread---25
第一种线程2:--HelloThread---26
第一种线程2:--HelloThread---27
第一种线程2:--HelloThread---28
第一种线程2:--HelloThread---29
第二种线程1:--HelloThread2---29
第二种线程2:--HelloThread2---1
第二种线程2:--HelloThread2---2
第二种线程2:--HelloThread2---3
第二种线程2:--HelloThread2---4
第二种线程2:--HelloThread2---5
第二种线程2:--HelloThread2---6
第二种线程2:--HelloThread2---7
第二种线程2:--HelloThread2---8
第二种线程2:--HelloThread2---9
第二种线程2:--HelloThread2---10
第二种线程2:--HelloThread2---11
第二种线程2:--HelloThread2---12
第二种线程2:--HelloThread2---13
第二种线程2:--HelloThread2---14
第二种线程2:--HelloThread2---15
第二种线程2:--HelloThread2---16
第二种线程2:--HelloThread2---17
第二种线程2:--HelloThread2---18
第二种线程2:--HelloThread2---19
第二种线程2:--HelloThread2---20
第二种线程2:--HelloThread2---21
第二种线程2:--HelloThread2---22
第二种线程2:--HelloThread2---23
第二种线程2:--HelloThread2---24
第二种线程2:--HelloThread2---25
第二种线程2:--HelloThread2---26
第二种线程2:--HelloThread2---27
第二种线程2:--HelloThread2---28
第二种线程2:--HelloThread2---29