- java中实现线程有两个方式:
Java支持多线程机制,并且java已经将多线程实现了,只需要继承就好。
第一种:编写一个类,直接继承java.lang.Thread类,并重写run方法
- 定义线程类
public class MyThread extends Thread{
public void run(){
}
}
创建线程对象
MyThread myThread = new MyThread();
启动线程
myThread.start();- 编写线程类:
class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("分线程————>" + i);
}
}
}
- 主线程中启动分线程:
public class ThreadTest02 {
public static void main(String[] args) {
//这里是main方法,属于主线程,在主栈中运行
//创建分支线程对象
MyThread myThread = new MyThread();
//.run()方法不会启动线程,不会分配新的分支线
// myThread.run();
//start()方法的作用:启动一个分支线程,在JVM中开辟一个新的栈空间,
// 这段代码在开辟一个新的栈空间之后就结束了,线程就启动成功了。
//启动成功的线程会自动调用run方法,并且run方法在分支栈的栈底部。
//run方法和main方法是平级的,都在栈的底部
myThread.start();
for (int i = 0; i < 1000; i++) {
System.out.println("main线程————>" + i);
}
}
}
第二种方式: 编写一个类,实现java.lang.Runnable接口,实现run方法
- 定义一个可运行的类
public class MyRunnable implements Runnable{
public void run(){
}
}
- 创建线程对象
Thread thread = new Thread(new MyRunnable());
启动线程
thread.start();- 注意:因为java中只支持单继承,使用第一种方式会有局限性,所以建议使用实现接口的第二种方式
- 编写线程类:
class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("分线程————>" + i);
}
}
}
- 主线程中启动分线程:
public class ThreadTest03 {
public static void main(String[] args) {
//创建线程对象
// MyRunnable myRunnable = new MyRunnable();
// Thread thread = new Thread(myRunnable);
//合并
Thread thread = new Thread(new MyRunnable());
//启动线程
thread.start();
for (int i = 0; i < 1000; i++) {
System.out.println("main线程————>" + i);
}
}
}
使用匿名内部类的方式实现线程
- 虽然接口无法实例化,但可以通过匿名内部类的方式直接来操作
public class ThreadTest04 {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("分支线程:" + i);
}
}
});
thread.start();
for (int i = 0; i < 1000; i++) {
System.out.println("main线程:" + i);
}
}
}