线程——Thread类、Runnable接口

线程:进程内部的一个独立执行单元,一个进程可以同时并发的运行多个线程

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间

在java运行中,一个main主方法就是一个线程

若要开启第二个线程就要使用Thread类

使用java程序可以同时并发的运行两段不相同的代码

Thread类构造方法:

public Thread()                                                                  创建一个线程对象

Thread t = new Thread();                //创建一个线程对象
t1.start

public Thread(String name)                                               创建一个线程对象并给线程命名

扫描二维码关注公众号,回复: 2755116 查看本文章
Thread t = new Thread("A线程");
t.start();

public Thread(Runnable target)                                          创建一个线程对象分配指定目标

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("使用Runnable接口创建的线程");
    }
});

public Thread(Runnable target,String name)                      创建一个线程对象分配指定目标,并命名

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("使用Runnable接口创建的线程");
    }
},"A线程");

Thread常用方法:

public String getName()                                                                  获取线程对象的名称

Thread t = new Thread("c线程");
System.out.println(t.getName());            //输出:c线程

public void setName(String name)                                                设置线程对象的名称

Thread t = new Thread();
t.setName("B线程");
System.out.println(t.getName());            //输出:B线程

public void start()                                                                                  开启线程,在新的线程路径中执行run方法内容

Thrad t = new Thread();
t.start();

public static void sleep(long millis)                                                   让当前线程休眠指定时间,单位是毫秒

Thread.sleep(20);                    //让线程休眠20ms

线程休眠需要处理异常

public static Thread currentThread()                                                获得当前执行线程的对象,返回一个线程对象

Thread t = Thread.currentThread();

创建线程方式一:

继承Thread类

1.创建一个自定义类继承Thread类

public class MyThread extends Thread {}

2.重写run方法,将线程的任务写在run()方法中

@Override
public void run(){
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
}

3.在主方法中创建自定义类对象,并开启线程即可

MyThread mt = new MyThread();
mt.run();
for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

这样就等于是main方法和MyThread两个线程在同时运行任务

由此,线程就创建完成了

创建线程方式二:

实现Runnable类

1.创建Runnable接口的实现类

public class MyRunnable implements Runnable {}

2.重写Runnable的run()方法,将线程的任务写在run()方法体中

@Override
public void run() {
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
}

3.在主方法中创建实现类对象,根据对象创建Thread对象,并开启线程

MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();

由此使用实现Runnable接口的线程就创建完成了

两种创建线程的方式相比:

1.实现Runnable接口的方法解决了java类单继承性的局限性

(若自定义的线程类本身就有继承关系,就无法继承Thread来创建对象,可是使用Runnable实现类就不会影响继承关系)

2.可以更好的在多个线程之间共享数据

(实现Runnable对象,创建的线程对象都是使用同一个target参数,线程同步中会细说)

3.将线程和任务进行了分离,降低了程序的耦合性

(创建多个线程时,继承Thread的方法需要创建多个不同对象,执行相同代码)

(使用Runnable实现类创建对象,只要把方法写在实现类的方法中,再使用实现类对象创建Thread,就能多个线程执行相同代码)

4.为线程池提供前提条件

创建线程方式三:

匿名内部类创建Runnable线程对象

匿名内部类创建线程,仅适合创建一个线程时,实用性不高

Thread t = new Thread(new Runnable() {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
});
t.start();

猜你喜欢

转载自blog.csdn.net/weixin_42022555/article/details/81634295