全国服务热线:13226870735

位置:太原优就业IT培训学校 > 学校动态 > 五分钟带你了解多线程线程开发

五分钟带你了解多线程线程开发

来源:太原优就业IT培训学校时间:2020/9/10 17:16:08

  多线程编程开发是随着互联网的不断发展而逐渐被提出的一种新的编程开发方式,而今天我们就一起来了解一下,多线程编程开发以及同步问题都有哪些。

  进程:正在进行中的程序。其实进程就是一个应用程序运行时的内存分配空间。

  线程:其实就是进程中一个程序执行控制单元,一条执行路径。进程负责的是应用程序的空间的标示。线程负责的是应用程序的执行顺序。

五分钟带你了解多线程线程开发

  一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区、自己的变量。

  jvm在启动的时,先有一个主线程,负责程序的执行,调用的是main函数。主线程执行的代码都在main方法中。

  当产生垃圾时,收垃圾的动作,是不需要主线程来完成,因为这样,会出现主线程中的代码执行会停止,会去运行垃圾回收器代码,效率较低,所以由单个线程来负责垃圾回收。

  随机性的原理:因为cpu的切换造成,哪个线程获取到了cpu的执行权,哪个线程就执行。

  返回当前线程的名称:Thread.currentThread().getName()

  线程的名称是由:Thread-编号定义的。编号从0开始。

  线程要运行的代码都统一存放在了run方法中。

  线程要运行必须要通过类中指定的方法开启。start方法。(启动后,就多了一条执行路径)

  start方法:1)、启动了线程;2)、让jvm调用了run方法。

  多线程安全问题的原因:

  通过图解:发现一个线程在执行多条语句时,并运算同一个数据时,在执行过程中,其他线程参与进来,并操作了这个数据。导致到了错误数据的产生。

  涉及到两个因素:

  1,多个线程在操作共享数据。

  2,有多条语句对共享数据进行运算。

  原因:这多条语句,在某一个时刻被一个线程执行时,还没有执行完,就被其他线程执行了。

  解决安全问题的原理:

  只要将操作共享数据的语句在某一时段让一个线程执行完,在执行过程中,其他线程不能进来执行就可以解决这个问题。

  同步:★★★★★

  好处:解决了线程安全问题。

  弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁。

  定义同步是有前提的:

  1,必须要有两个或者两个以上的线程,才需要同步。

  2,多个线程必须增加使用的是同一个锁。

  同步的二种表现形式:

  同步函数:其实就是将同步关键字定义在函数上,让函数具备了同步性。

  同步函数是用的哪个锁呢?

  通过验证,函数都有自己所属的对象this,所以同步函数所使用的锁就是this锁。

  当同步函数被static修饰时,这时的同步用的是哪个锁呢?

  静态函数在加载时所属于类,这时有可能还没有该类产生的对象,但是该类的字节码文件加载进内存就已经被封装成了对象,这个对象就是该类的字节码文件对象。

  所以静态加载时,只有一个对象存在,那么静态同步函数就使用的这个对象。

  这个对象就是类名.class

  同步代码块和同步函数的区别?

  同步代码块使用的锁可以是任意对象。

  同步函数使用的锁是this,静态同步函数的锁是该类的字节码文件对象。

  在一个类中只有一个同步,可以使用同步函数。如果有多同步,必须使用同步代码块,来确定不同的锁。所以同步代码块相对灵活一些。

  同步死锁:通常只要将同步进行嵌套,就可以看到现象。同步函数中有同步代码块,同步代码块中还有同步函数。

  线程间通信:思路:多个线程在操作同一个资源,但是操作的动作却不一样。

  1:将资源封装成对象。

  2:将线程执行的任务(任务其实就是run方法。)也封装成对象。

  等待唤醒机制:涉及的方法:

  wait:将同步中的线程处于冻结状态。释放了执行权,释放了资格。同时将线程对象存储到线程池中。

  notify:唤醒线程池中某一个等待线程。

  notifyAll:唤醒的是线程池中的所有线程。

  注意:

  1:这些方法都需要定义在同步中。

  2:因为这些方法必须要标示所属的锁。

  你要知道A锁上的线程被wait了,那这个线程就相当于处于A锁的线程池中,只能A锁的notify唤醒。

  3:这三个方法都定义在Object类中。为什么操作线程的方法定义在Object类中?

  因为这三个方法都需要定义同步内,并标示所属的同步锁,既然被锁调用,而锁又可以是任意对象,那么能被任意对象调用的方法一定定义在Object类中。

  wait和sleep区别:分析这两个方法:从执行权和锁上来分析:

  wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或者notifyAll来唤醒。

  sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。

  wait:线程会释放执行权,而且线程会释放锁。

  Sleep:线程会释放执行权,但不是不释放锁。

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/3173/news/252817/违者必究! 以上就是太原优就业IT培训学校 小编为您整理 五分钟带你了解多线程线程开发的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:13226870735