Java多线程Thread
多线程实现原理
线程内存图
创建多线程的多种方法
自定义Thread子类
class MyThread extends Thread{
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println(getName()+":"+i);
}
}
}
实现Runnable接口
实现Runnable接口java.Lang. Runnable
Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为run 的无参数方法。java.Lang. Thread类的构造方法
Thread ( Runnable target)分配新的 Thread 对象。
Thread ( Runnable target,string name))分配新的 Thread 对象。
实现步骤:
- 创建一个Runnable接口的实现类
- 在实现类中重写Runnable接口的run方法,设置线程任务
- 创建一个Runnable接口的实现类对象
- 创建Thread类对象,构造方法中传递Runnable接口的实现类对象
- 调用Thread类中的start方法,开启新的线程执行run方法
class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 100; i++) {
Thread thread = Thread.currentThread();
System.out.println(thread.getName()+":"+i);
}
}
}
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();
for (int i = 0; i < 100; i++) {
Thread thread2 = Thread.currentThread();
System.out.println(thread2.getName()+":"+i);
}
实现Runnable接口创建多线程程序的好处
实现Runnable接口创建多线程程序的好处:
- 避免了单继承的局限性
一个类只能继承一个类(一个人只能有一个亲爹),类继承了Thread类就不能继承其他的类实现了Runnable接口,还可以继承其他的类,实现其他的接口 - 增强了程序的扩展性,降低了程序的耦合性(解耦)
实现Runnable接口的方式,把设置线程任务和开启新线程进行了分离(解耦)。
实现类中,重写了run方法:用来设置线程任务
创建Thread类对象,调用start方法:用来开启新线程
使用匿名内部类
匿名内部类方式实现线程的创建
匿名:没有名字
内部类:写在其他类内部的类匿名内部类
作用:简化代码
把子类继承父类,重写父类的方法,创建子类对象合一步完成
把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成
匿名内部类的最终产物:子类/实现类对象,而这个类没有名字
格式:
new父类/接口(){
重复父类/接口中的方法
};
new Thread(){
@Override
public void run() {
for (int i = 0; i < 100; i++) {
Thread thread = Thread.currentThread();
System.out.println(thread.getName()+":"+i);
}
}
}.start();
或者使用Runnable
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
Thread thread = Thread.currentThread();
System.out.println(thread.getName()+":"+i);
}
}
});
thread.start();
线程的方法
获取线程的名称
获取线程的名称:
- 使用Thread类中的方法getName( )
String getName()返回该线程的名称。
public class Demo02Thread {
public static void main(