线程总结 和 javadoc标记

一、Thread线程API文档学习:
线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。
每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定为创建线程的优先级,并且当且仅当创建线程是守护线程时,新线程才是守护程序。
当 Java 虚拟机启动时,通常都会有单个非守护线程(它通常会调用某个指定类的 main 方法)。Java 虚拟机会继续执行线程,直到下列任一情况出现时为止:
调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。
非守护线程的所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。
创建新执行线程有两种方法。
①将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。接下来可以分配并启动该子类的实例。
②声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。

二、老师总结:
(1)线程与多线程:
线程:程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。
多线程:在单个程序中可以同时运行多个不同的线程执行不同的任务。
(2)多线程编程的目的
“最大限度地利用CPU资源”,当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。
(3)将我们希望线程执行的代码放到run方法中,然后通过start方法来启动线程,start方法首先为线程的执行准备好系统资源,然后再去调用run方法。当某个类继承了Thread类之后,该类就叫做一个线程类。
(4)两种生成方式注意事项:
①Thread类也实现了Runnable接口,因此实现了Runnable接口中的run方法;
②当生成一个线程对象时,如果没有为其设定名字,那么线程对象的名字将使用如下形式:Thread-number(从0开始),该number将是自动增加的,并被所有的Thread对象所共享(因为它是static的成员变量)。
③当使用继承Thread类来生成线程对象时,我们需要重写run方法,因为Thread类的run方法此时什么事情也不做。
④当使用实现Runnable接口来生成线程对象时,我们需要实现Runnable接口的run方法,然后使用new Thread(new MyThread())(假如MyThread已经实现了Runnable接口)来生成线程对象,这时的线程对象的run方法就会调用MyThread类的run方法,这样我们自己编写的run方法就执行了。
(5)关于成员变量与局部变量:
如果一个变量是成员变量,那么多个线程对同一个对象的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成员变量的改变会影响到另一个线程)。
如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程对该局部变量的改变不会影响到其他的线程。
(6)停止线程的方式:
不能使用Thread类的stop方法来终止线程的执行。一般要设定一个变量,在run方法中是一个循环,循环每次检查该变量,如果满足条件则继续执行,否则跳出循环,线程结束。
(7)synchronized关键字:
当synchronized关键字修饰一个方法的时候,该方法叫做同步方法。
Java中的每个对象都有一个锁(lock)或者叫做监视器(monitor),当访问某个对象的synchronized方法时,表示将该对象上锁,此时其他任何线程都无法再去访问该synchronized方法了,直到之前的那个线程执行方法完毕后(或者是抛出了异常),那么将该对象的锁释放掉,其他线程才有可能再去访问该synchronized方法。
如果一个对象有多个synchronized方法,某一时刻某个线程已经进入到了某个synchronized方法,那么在该方法没有执行完毕前,其他线程是无法访问该对象的任何synchronized方法的。
(8)Java中如果我们自己没有产生线程,那么系统就会给我们产生一个线程(主线程,main方法就在主线程上运行),我们的程序都是由线程来执行的。
(9)多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响。
(10)线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。
(11)多线程程序比多进程程序需要更少的管理费用。进程是重量级的任务,需要分配给它们独立的地址空间。进程间通信是昂贵和受限的。进程间的转换也是很需要花费的。另一方面,线程是轻量级的选手。它们共享相同的地址空间并且共同分享同一个进程。线程间通信是便宜的,线程间的转换也是低成本的。
(12)线程的生命周期可分为四个状态:
①创建状态:
当用new操作符创建一个新的线程对象时,该线程处于创建状态。处于创建状态的线程只是一个空的线程对象,系统不为它分配资源
②可运行状态:
执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体—run()方法,这样就使得该线程处于可运行( Runnable )状态。
这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行。
③不可运行状态:
(1)当发生下列事件时,处于运行状态的线程会转入到不可运行状态。
•调用了sleep()方法;
•线程调用wait方法等待特定条件的满足
•线程输入/输出阻塞
(2)返回可运行状态:
•处于睡眠状态的线程在指定的时间过去后
•如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待线程条件的改变
•如果线程是因为输入/输出阻塞,等待输入/输出完成
④消亡状态:
当线程的run方法执行结束后,该线程自然消亡。

5、什么叫守护程序和守护进程?
答:守护程序:是一种计算机进程,它的工作就是”监听”想要更多特殊网络服务的连接,处理所有被除数认为是套接字尝试的临时连接的合法尝试。
守护进程:也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

6、线程的优先级:
答:设置优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行。
一个线程的优先级设置遵从以下原则:
①线程创建时,子继承父的优先级
②线程创建后,可通过调用setPriority()方法改变优先级。
③线程的优先级是1-10之间的正整数。
1 - MIN_PRIORITY,
10 – MAX_PRIORITY
5- NORM_PRIORITY

7、线程的调度策略:
线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行。
①线程体中调用了yield()方法,让出了对CPU的占用权
②线程体中调用了sleep()方法, 使线程进入睡眠状态
③线程由于I/O操作而受阻塞
④另一个更高优先级的线程出现。
⑤在支持时间片的系统中,该线程的时间片用完。

8、什么是时间片?
答:时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。

三、Javadoc的一些基本标记:
答:javadoc标记由“@” + 标记类型 + 专用注释引用组成
①author:标明开发该类模块的作者
语法:@author name-text
②version:标明该类模块的版本
语法:@version version-text
③see:参考转向,也就是相关主题
语法:@see reference
④param:对方法中某参数的说明
语法:@param parameter-name description
⑤return:对方法返回值的说明
语法:@return description
⑥exception:对方法可能抛出的异常进行说明
语法:@exception class-name description
throws:对方法可能抛出的异常进行说明
语法:@throws class-name description
⑦@deprecated:告诉用户什么时候开始不鼓励使用该API以及使用什么替代它
语法:@deprecated deprecated-text

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值