多线程

来源:互联网 发布:淘宝壹心表行全是好评 编辑:程序博客网 时间:2024/05/29 08:39

1.并发的多面性

并发解决的问题大致可以分为两种:

1)速度问题

  • 并发是用于多处处理器编程的基本工具。
  • 并发通常是提高运行在单处理器上的程序的性能。

2)设计可管理性

  • 解决这个问题可以使用协作多线程。
  • JAVA的线程机制是抢占式的,这表示了调度机制会周期性的中断线程,将上下文切换到另外一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动它的任务。在协作式的系统中,每个任务都会自动的放弃控制,这就要求程序员要有意识的在每个任务重插入某种类型的让步语句。协作式系统的优势是双重的:上下文切换的开销通常比抢占式系统要低廉的多,并且可以同时执行的线程的数量在理论上没有任何的限制。

2.基本线程的机制

并发编程可以使的我们可以将程序划分为多个分离的,独立运行的任务,通过使用多线程机制,这些独立的任务重的每一个都将有执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务。其底层是切分CPU的时间。

3.如何创建线程

1)继承Thread类,并重写run()方法

2)实现Runnable接口,并重写run()方法

4.线程中的一些方法

1)start():开启一个线程

2)sleep():是Thread类下的一个静态方法,可以带参数,调用它可以使得任务中止执行给定的时间。

3)setPriority():设置线程的优先级

4)getPriority():得到线程的优先级

5)setDaemon():把它设置为一个后台线程

6)isDaemon():确定线程是否是一个后台线程,如果是 一个后台线程,那么它创建的任何线程将被自动设置为后台线程。

7)join():等待一段时间直到第二个线程结束才执行。如果某个线程在另一个线程t上调用t.join(),次线程将被挂起,直到目标线程t结束才可以恢复。这个方法也可以带上一个超时参数,如果目标线程在这段时间到期时还没有结束的话,join()方法总能返回。对join()方法的调用也可以中断,做法是在调用线程上调用interrupt()方法,此时需要使用到try-catch语句

4.线程的优先级

1)在绝大多数的时间里线程都是以默认的优先级进行执行。

2)MAX_PRIORITY,NORM_PRIORITY,MIN_PRIORITY,

5.后台线程

是指在程序运行的时候在后台提供的一种通用的服务线程,并且这种线程不属于程序中不可或缺的部分。因此,当所有的非后台线程结束时,程序也就终止了,同时还会杀死进程中的所有后台线程。反过来说的话就是只要有任何非后台的线程还在运行,程序也就不会终止。


0 0