创建线程的方法

创建线程的方法

继承Thread类

总结

1.子类继承Thread类具备多线程能力

2.启动线程:子类对象.start()

3.不建议使用:避免OOP(面向对象编程)单继承局限性

4.Thread中run与start调用的不同:
创建线程的方法

示例代码

public class TestThread1 extends Thread {
    @Override
    public void run() {
        // run方法线程
        for (int i = 0; i < 20; i++) {
            System.out.println("in run--"+i);
        }
    }

    public static void main(String[] args) {
        // main线程——主线程
        TestThread1 thread1 = new TestThread1();
        thread1.start(); // start:交替进行


        for (int i = 0; i < 200; i++) {
            System.out.println("in mian--"+i);
        }

        //thread1.run(); // run: 先进行分支,分支结束后进行主线程
    }
}

实现Runnable接口

总结

1.实现接口Runnable具有多线程能力

2.启动线程:传入目标对象+Thread对象.start()

3.推荐使用:避免单继承局限性,灵活方便,方便同一个对象被多个线程使用

示例代码

public class TestThread2 implements Runnable {
    @Override
    public void run() {
        // run方法线程
        for (int i = 0; i < 20; i++) {
            System.out.println("in run--"+i);
        }
    }

    public static void main(String[] args) {
        // main线程——主线程
        TestThread2 thread2 = new TestThread2();

        // 创建线程对象,通过线程对象开启我们的线程, 代理
        Thread thread = new Thread(thread2);
        thread.start();

        for (int i = 0; i < 200; i++) {
            System.out.println("in mian--"+i);
        }
    }
}

实现Callable接口

总结

1.实现callable接口,需要返回值类型

2.重写call方法,需要抛出异常

3.创建目标对象

4.创建执行服务

ExecutorService pool = Executors.newFixedThreadPool(taskSize); //taskSize为线程池可允许的线程数量

5.提交执行

 Future f = pool.submit(c);

6.获取结果

f.get();

7.关闭服务

 pool.shutdown();

其他涉及知识点:静态代理(Thread与Runnable)、守护程序

静态代理

含义

被代理类和代理类同时实现相应的一套接口,通过代理类调用重写接口的方法,实际上调用的是原始对象的同样的方法。

代码举例

人们结婚,找婚庆公司代理,婚庆公司和人们都需要完成结婚这件事情。

接口:结婚接口

interface Marry {
    void marry();
}

类:结婚的人

class Person implements Marry{
    private String name; //姓名

    Person(String name) {
        this.name = name;
    }

    @Override
    public void marry() {
        System.out.println(name+"结婚啦!");
    }
}

类:婚庆公司

class WeddingCompany implements Marry{

    private Person target; // 结婚对象

    WeddingCompany(Person target) {
        this.target = target;
    }

    @Override
    public void marry() {
        before();
        target.marry();
        after();
    }

    void before() {
        System.out.println("结婚前...");
    }

    void after() {
        System.out.println("结婚后...");
    }
}

执行代码

public static void main(String[] args) {
    WeddingCompany company = new WeddingCompany(new Person("小米"));
    company.marry();
}

执行效果

创建线程的方法

总结

1.代理对象可以扩展很多对象做不来的事情。

2.真实对象可以专注做自己的事情。

上一篇:phpstudy + tp6 出现 404 Not Found nginx/1.15.11


下一篇:ingress nginx出现404错误