多线程基础

1.1什么是多线程

  线程是程序执行的一条路径,一个进程可以包含多个线程;

  多线程并发执行可以提高程序的效率,同时完成多项工作;

1.2并行和并发

  并行:两个任务同时运行,(需要多核cpu)

  并发:两个任务请求运行,而处理器只能接受一个任务,就让两个任务轮流进行,由于时间间隔较短,给人感觉在同时原运

1.3构造方法

  

1.4线程实现方式

  1.41继承Thread

      定义类继承Thread

      重写run方法

      线程需要做的事情卸载run方法中

      创建线程对象

      开启线程,内部自动执行run方法

  1.4.2实现runnble接口重写run方法

    定义类实现runnble接口

    重写run方法

    线程需要做的事情卸载run方法中

    创建runnble子类对象

    创建Thread类,传入runnable对象

    调用thread的start方法,内部会自动调用runnable的run方法

 runnable原理:

  Thead类的构造函数传入的Runnable的引用,Start()调用的run()方法时会判断Runable的引用是否为空,不为空时

走的时Runable的run方法。

1.5区别优弊

  继承Theard:

      可以直接使用Thread的方法;

      因为的类的单继承,已有父类,就不能使用该方法

  实现runable接口:

      接口的多实现,父类也可以实现runnable接口

      不能直接使用Thead的方法,需要先换取Thread对象

1.6名内部类实现线程的方式(不用特别去继承或实现Thread和Runnab)

    1.6.1继承Thread

    

    1.6.2实现Runnable接口

  

1.7守护线程

  setDaemon(),设置一个线程为守护线程,该线程不会单独执行 ,但其他非守护线程执行结束后,自动退出。

  

1.8线程同步

  多线程并发时般cpu会在多个线程切换执行,当希望cpu在执行某个线程未执行完前不要切换到其他线程时,就需要同步。

  1.8.1同步代码块

    使用synchronized关键字加上一个锁对象,同步代码块如果有相同的所对象,那么他们就是同步的。

    1.8.2同步方法

      使用synchronized关键字修饰一个方法,那么该方法所有代码都是同步的

       注:非静态的同步方法所对象时this,静态方法所对象是该类的字节码对象

1.9 死锁

  多线程同步的时候,如果同步代码嵌套,使用相同的所锁,就可能出现死锁

注:collcations中可以让非同步的集合转化未同步的

      

原文地址:https://www.cnblogs.com/tangxz/p/9593175.html