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

Java线程总结

时间:2015-03-29 18:13:01      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:java线程 java 线程

什么是进程,什么是线程?

简而言之,进程可以看成正在运行的程序的实例。而线程可以看成进程里面的一条执行路径。

每个进程都有独立代码和数据空间(进程上下文),同一个进程中可以共享程序的内存和数据。所以线程之间切换代价小,进程之间切换代价大。

多进程: 在操作系统中能同时运行多个任务(程序)

多线程: 在同一进程有多个并发任务在执行

线程的创建有两种方式。

方式一:实现Rannable接口,重写run方法。这种方法,还需要使用Thread类,来对Runnable子类的实例进行封装,调用Thead类中的start方法才能启动。

方式二:继承Thread类,重写run方法,调用start()使该线程处于"可执行/可运行"状态,等待虚拟机来调度

启动线程时,创建的实例不能直接调用,重写的run方法,否则不是启动多线程。而是调用start方法。

run方法称为线程体方法,线程被CPU调度时,自动执行,同一个线程对象只能调用一次start方法。无论线程是否结束,Runnable接口可以为一个线程的多个实例共享数据。

方法:

long getId():返回该线程的标识符。

String getName():返回该线程的名称。

void interrupt():中断线程。

boolean isAlive():测试线程是否处于活动状态。

boolean isDaemon():测试该线程是否为守护线程。

booleanisInterrupted():测试线程是否已经中断。

void setDaemon(booleanon):将该线程标记为守护线程或用户线程。

voidsetName(String name):改变线程名称,使之与参数 name 相同。

static voidsleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。

void start():使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

static voidyield():暂停当前正在执行的线程对象,并执行其他线程

中断线程的两种方法:

方法一:在线程类中设置一个标志位,通过在其他线程(例如主线程)中修改该标志位的值,来达到停止线程的目的.一般在子线程的run()的循环中需要加上退出条件if(flag){....break;}

方法二:线程对象调用interrupt()方法。

(1)要被中断的线程阻塞在sleep()/wait()/join(),会引发一个      InterruptedException,需要在catch语句中进行处理;

(2)不是上述情况下,可以用Thread.interrupted()来获取是否中断的状态,如果是被中断了,break出来,不再执行后续语句;注意:该方法调用后,会清除"中断标志",下次再调用时,将得到false

线程的调度:

      线程睡眠:Thread.sleep(longmillis) throws InterruptedException 方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。

线程让步:Thread.yield() 方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程。

线程加入:join() throwsInterruptedException 方法 在当前线程中调用另一个线程的 join()方法,则当前线程转入WAITING状态,直到另一个线程运行结束,当前线程再由阻塞转为就绪状态。

线程等待:Object 类中的wait() throws InterruptedException 方法,导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 唤醒方法。

线程唤醒:Object 类中的notify()方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的。Object类中的notifyAll()方法,唤醒在此对象监视器上等待的所有线程。

线程的状态转换:线程共有创建状态,就绪状态,运行状态,阻塞状态,死亡状态。

创建状态,在产生线程的对象,还没有调用start方法之前的状态。调用start方法后,就进入了就绪状态,等待jvm的调度。一旦jvm调度了线程,就使线程进入了运行状态。如果运行着的线程,被暂停,就进入了阻塞状态。如果线程的run方法执行结束或者线程调用了stop方法,则线程就会死亡。

线程的优先级。最高级为10,最小为1,默认为5。线程的优先级设置,并不一定优先级高的就一定先执行,而是先执行的概率大。所以优先级高的,线程先执行这句话是错的。

使用setPriority()和getPriority()方法分别用来设置和获取线程的优先级。

一般情况下不需要手动设置线程的优先级,而是用默认的优先级就好。

本文出自 “JDK7环境的搭建” 博客,请务必保留此出处http://zzhhz.blog.51cto.com/7107920/1626187

Java线程总结

标签:java线程 java 线程

原文地址:http://zzhhz.blog.51cto.com/7107920/1626187

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