线程相关——《java网络编程》
Posted chanonnn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程相关——《java网络编程》相关的知识,希望对你有一定的参考价值。
线程相关
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网络编程》的主要内容,如果未能解决你的问题,请参考以下文章