码迷,mamicode.com
首页 > 编程语言 > 详细

线程相关——《java网络编程》

时间:2020-05-24 11:43:06      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:sys   安全   一点   vat   编程   void   final   接口   初始化   

线程相关

 

1. 产生线程:

  •      继承Thread并重写public void run()。在try块中初始化文件流。main方法中利用多态新建一个Thread类变量,并调用.start开始运行。但重写run()方法无法向程序的其他部分传递信息。
  •      也可以不继承Thread类,而是实现Runnable接口,并重写run方法。在main方法中新建该类,并将其传给Thread类的构造函数。


     不同的线程会占用不同的系统cpu和磁盘速度等,它们在资源分配中产生竞争关系,而你无法控制这一点。这些被称为竞态条件。它们会导致线程可能不在你期望的时间运行结束。为了解决竞态条件的问题,人们有两种选择,轮询和回调。轮询就是让主函数不停询问线程,直到得到结果,但这并不是一个好办法,它会占用主函数里其他语句的运行时间。回调就是让线程告诉主函数它在什么时候运行结束。可以通过静态方法回调,也可以通过实例方法回调。实例方法回调时,线程类需要在它内部有一个对回调对象的引用。

2. 同步线程:
 同步可以指定一部分程序只能由一个线程调用,避免了线程之间争抢资源。有两种方法可以进行同步:

  •  可以使用同步块进行同步。Synchronized(System.out){}。小括号里的是要同步的对象。
  •  java提供了一个同步方法。在方法之前声明synchronized可以对整个方法进行同步。

 同步可以解决线程安全问题,但是它并不总是最好的解决办法,还有一些其他的方法可以做到线程安全。

  • 每个线程使用自己的局部变量。
  • 利用类中某些变量的不可变性,将其声明为private和final。
  • 将非线程安全的类作为线程安全类的一个私有字段,只以线程安全的方法访问这个类。


3. 线程死锁:
 两个线程都抢占了一部分同步的资源,但都不愿意放弃已有的资源,就会发生死锁。

4. 线程调度:
 线程有自己的优先级,通过setPriority来设置。
 线程有两种调度方式,抢占式和协作式。抢占式会在轮到其他cpu时间时暂停当前线程,把cpu控制权交给其他线程。协作式则会等待当前线程运行完毕,再移交控制权。

 一个线程有很多种方式可以进行被暂停,以让其他线程有机会运行。阻塞、放弃、休眠等等等等,等到需要用到的时候再来一一探究。

线程相关——《java网络编程》

标签:sys   安全   一点   vat   编程   void   final   接口   初始化   

原文地址:https://www.cnblogs.com/chanonnn/p/12950283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!