Java的线程

1.如果一个类通过继承Thread类来实现,那么只能调用一次start方法,如果调用多次,则将会抛出“IllegalThreadStateException“

2.实现Runnable接口相对于继承Thread类来说的优势:

A>适合多个相同程序代码的线程去处理同一资源的情况。

B>可以避免由于Java的单继承特性带来的局限性

C>增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的

3.线程的状态

想要实现多线程,必须在主线程中创建新的线程对象。任何线程一般具有5种状态,即创建、就绪、运行、阻塞、终止。

A>创建状态

在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时。它已经有了相应的内存空间和其他资源,但还处于不可运行状态

B>就绪状态

新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,线程进入就绪状态。此时,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件。

C>运行状态

当就绪状态的线程被调用并获得处理器资源时,线程就进入的运行状态。此时,自动调用线程对象的run()方法。run()方法定义了该线程的操作和功能。

D>堵塞状态

一个正在执行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入/输出操作时,将让出cpu并暂时终止自己的执行,进入堵塞状态。在可执行状态下,如果调用sleep(),suspend(),wait()等方法,线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程才可以转入就绪状态。

E>死亡状态

线程调用stop()方法时或run()方法执行结束后,即出入死亡状态。出入死亡状态的线程不具有继续运行的能力。

4.Java程序每次运行至少启动几个线程?

答:至少启动两个。每当使用Java命令执行一个类时,实际上都会启动一个JVM,每一个JVM实际上就是在操作系统中启动了一个进程,Java本身具备了垃圾回收的机制。所以在Java运行时至少会启动两个线程,一个时main线程,另外一个时垃圾收集线程。

5.可以实用isActive()判断线程是否存活

6.使用join()方法强制某个线程运行。在此期间,其他线程无法运行,必须等待该线程运行完才能运行

7.sleep():线程休眠

8.interrupt():线程中断

9.后台线程:t.setDemon(true);

10.线程的优先级

可以通过setPriority()设置线程的优先级

最低优先级:MIN_PRIORITY

中等优先级(线程的默认优先级):NORM_PRIORITY

最高优先级:MAX_PRIORITY

注意:并非线程的优先级越高就一定先执行,哪个线程先执行由CPU的调度决定

主方法(main方法)的优先级为5

11.线程礼让(yield):将一个线程的操作暂时让给其他线程执行

12.synchronized用来同步代码,避免死锁现象发生


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值