多线程基础小结

时间:2021-01-04 21:13:46

1 实现方式

线程的实现有2种方式:

  • 继承Thread;

  • 实现Runnable;(推荐使用)


2 实现Runnable好处

  • 将线程的任务从线程的子类中分离出来,进行了单独的封装。按照面向对象的思想将任务封装成对象。

  • 避免了Java单继承的局限性;

  • 为后期的代码功能扩展性提供便利。


3 两种线程方式区别

  • 继承Thread:线程代码存放Thread子类run方法中;

  • 实现Runnable,线程代码存在接口的子类的run方法;

  • 在多线程中,Thread为多个线程对象,而Runnable只有一个Runnable对象。


4 线程安全问题的产生原因

  • 多线程在操作共同数据;

  • 操作共享数据的代码有多条。


5 解决安全问题

1 思路

就是将多条操作共享数据的代码进行封装,当有线程执行这些代码的时候,其他的线程不可参与其中。

2 解决方案

使用synchronized关键字。

  • 同步代码块:锁对象为Obj;建议使用。

  • 非静态同步函数:this,当前类对象;

  • 静态同步函数:XXX.class 该函数所属字节码文件对象,不可以用getClass()表示(非静态方法,不可用在静态方法中)。

6 同步的利弊

  • 好处:解决了线程的安全问题;

  • 弊端:占用CPU内存资源,多次判断锁,相对效率低,但在可接受范围之内;

7 同步的前提

必须有多线程同时使用一个公共资源。