java实现线程方式
第一种方式:继承 extends Thread;
- 实现线程的第一种方式:编写一个类,直接继承java.lang.Thread,重写run方法。
- 创建线程对象:new就行了;
- 启动线程: 调用线程对象的start()方法。作用是:启动一个分支线程,在JVM中开辟一个新的栈空间
- 这段代码任务完成之后,瞬间就结束了。
- 启动成功的线程会自动调用run方法,并且run方法在分支栈的栈底部(压栈)。
- run方法在分支栈的栈底部,main方法在主栈的栈底部。run和main是平级的。
//第一种方式:编写一个类,直接继承java.lang.Thread,重写run方法。
// 定义线程类
public class MyThread extends Thread{
public void run(){
}
}
// 创建线程对象
MyThread t = new MyThread();
// 启动线程。
t.start();
public class ThreadTest{
public static void main(String[] args) {
// 这里是main方法,这里的代码属于主线程,在主栈中运行。 新建一个分支线程对象
MyThread t = new MyThread();
t.start();
// 这里的代码还是运行在主线程中。
for(int i = 0; i < 1000; i++){
System.out.println("主线程--->" + i);
}
}
}
public class MyThread extends Thread {
@Override
public void run() {
// 编写程序,运行在分支栈。
for(int i = 0; i < 1000; i++){
System.out.println("分支线程--->" + i);
}
}
}
第二种方式:implements Runnable 编写一个类实现Runnable接口,它还可以去继承其它的类,更灵活。
- 实现java.lang.Runnable接口,实现run方法
- Thread t = new Thread(new 实现类())。
// 定义一个可运行的类
public class MyRunnable implements Runnable {
public void run(){
}
}
// 创建线程对象
Thread t = new Thread(new MyRunnable());
// 启动线程
t.start();
public class MusicDemo implements Runnable{
public void run(){
for(int i=0;i<100;i++){
System.out.println("播放音乐"+i);
}
}
}
Runnable musicDemo = new MusicDemo();
//Runnable接口中没有start方法需要Thread线程new出来
Thread thread = new Thread(musicDemo );
thread .start();
//合并之后
Thread thread = new Thread(new MusicDemo());
thread.start();
第二种方式:匿名内部类
public class ThreadTest04 {
public static void main(String[] args) {
// 创建线程对象,采用匿名内部类方式。这是通过一个没有名字的类,new出来的对象。
Thread t = new Thread(new Runnable(){
@Override
public void run() {
for(int i = 0; i < 100; i++){
System.out.println("t线程---> " + i);
}
}
});
// 启动线程
t.start();
for(int i = 0; i < 100; i++){
System.out.println("main线程---> " + i);
}
}
}