多线程-总结

一.多线程的创建

创建 多线程方式1:【参考WindowTest】

  1. 创建一个继承Thread的子类

    1. 重写Thread中的run(),将需要执行的线程代码塞入方法体

      1. 创建Thread的子类对象

        1. 通过子类对象调用start()

创建 多线程方式2:【参考WindowTest2】

  1. 创建一个Runnable接口的类

    1. 实现类去实现Runnable的抽象方法 run()

      1. 创建实现类的对象

        1. 将此对象作为参数传递到Thread类的构造器中,创建Thread对象

          1. 通过Thread类的对象调用start()

比较两种创建线程的方式

开发中,优先选择使用实现Runnable接口的方式 原因 1. 实现的方式没有类的单继承行的局限性 2.实现的方式更适合处理多线程共享数据的情况

联系:public class Thread implements Runnable 相同点:两种方式都需要重写run(),将线程需要执行的逻辑声明在run()中

 

二.线程安全问题的解决

方式一 同步代码块

 synchronized(锁){
    //需要同步的代码块
}

 

说明: 1.操作共享数据的代码,即是需要被同步的代码 2.共享数据:多个线程共同操作的变量 比如:本例子的Ticket 3.同步监视器:俗称 锁 ,任何一个类的对象,都可以充当锁

要求: 多个线程必须要共用一把锁

补充: 在实现Runable接口创建多线程的方式中,我们可以考虑使用this充当同步监视器解决了线程安全问题 操作同步代码时 ,只能有一个线程参与,其他线程等待 ,相当于一个单线程过程,效率低

 

方式二:同步方法

public synchronized void test{
   //需要同步的方法体
}

 

如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步

方法二 总结

  1. 同步方法仍然设计到同步监视器起,只是不需要显示的声明,要求仍然是必须共用一把锁【参考WindowTest3与WindowTest4】

  2. 非静态的同步方法,同步监视器:this

  3. 静态的同步方法,同步监视器是:当前类本身

posted @ 2020-08-15 20:18  HunterEasyTouch  阅读(76)  评论(0)    收藏  举报