Java7线程学习笔记(一)

线程的创建:
继承Thread类,并且覆盖run()方法。
创建一个实现runnable接口的类,使用带参数的Thread构造器来创建Thread对象,这个类就是实现runnable接口类的一个对象。

每个Java程序都至少有一个执行线程,当运行程序的时候,jvm将启动这个执行线程来调用程序的main方法。
当调用Thread对象的start()方法时,另一个执行线程将被创建,
当一个程序的所有线程都执行完成时,更明确的说,当所有的非守护线程都运行完成的时候,这个Java程序宣告结束。如果初始线程(执行main的线程)结束了,其余的线程仍将继续执行直到他们运行结束。如果某一个线程调用了System.exit()指令来结束程序的执行,所有的线程都将结束。
对一个实现了runnable接口的类来说,创建Thread对象并不会创建一个新的执行线程,同样的调用它的Run()方法,也不会创建一个新的执行线程,只有调用start()方法,才会创建一个新的执行线程。
线程信息的获取和设置:
Thread类有一些保存信息的属性,这些属性可以用来标识线程,显示线程的状态或者控制线程的优先级。
ID:保存了线程的唯一标识符。
Name:保存了线程的名称。
Priority:保存了线程对象的优先级。线程的优先级是从1到10.其中1是最低优先级;10是最高优先级,不推荐改变线程的优先级。
Status:保存了线程的状态,在Java中线程的状态有6中:new 、runnable、blocked、waiting、time waiting或者terminated。
线程的中断:
Java提供了中断机制,我们可以用它来结束一个线程,这种机制要求线程检查他是否被中断了,然后决定是不是响应这个中断请求,线程允许忽略中断请求并且继续执行。
Thread.interrupt();//中断线程。
isInterrupted()方法只是返回这个属性的值。
线程的休眠和恢复:
可以通过sleep方法来达到这个目标。Sleep()方法接受整形数值作为参数,以表明线程挂起执行的毫秒数,当线程休眠的时间结束了,jvm会分给它CPU时钟,线程将继续执行它的指令。
Sleep方法的另一种使用方式是通过TimeUnit枚举类进行调用。
如果休眠中线程被中断,该方法就会立即抛出InterruptedException异常,而不需要等待线程休眠时间结束。
Yield()方法也可以使线程对象释放CPU。但是JVM并不保证遵循这个要求,一般只做调试使用。
等待线程的终止:
在一些情形下,我们必须等待线程的终止,例如,我们的程序在执行其他的任务时,必须向初始化一些必须的资源。可以使用线程来完成这些初始化任务,再执行程序的其他任务。
可以使用Thread类的join()方法。当一个线程对象的join()方法被调用时,调用它的线程将被挂起,直到这个线程对象完成它的任务。
守护线程的创建和运行:
守护线程的优先级很低,通常来说,当同一个应用程序里没有其他线程运行的时候,守护线程才运行。当守护线程是程序里唯一运行的线程时,守护线程执行结束后,jvm也就结束了这个程序。
因为这种特性,守护线程通常被用来作为同一个程序中普通线程的服务提供者,他们通常是无限循环的,以等待服务请求或者执行线程的任务。他们不能做重要的任务,一个典型的守护线程是Java的垃圾回收器。
setDaemon(true);将当前线程设置为守护线程。该方法只能在start()方法被调用之前设置,一旦线程开始运行,将不能再修改守护状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值