欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java面试必备之多线程 博客分类: java基础 java多线程 

程序员文章站 2024-03-25 16:28:52
...

     Java多线程

一、线程

    线程:可以并发执行多个任务。

二、线程创建方式

    线程有两种创建方式。

方式一:直接继承Thread并重写run方法。需要注意,启动线程要调用start方法,start方法调用完毕后,线程纳入到线程调度中,线程调度会分配CPU时间片来运行该线程,当线程运行时会自动调用run方法。

第一种创建线程方式有两个不足:

 1:由于要求继承Thread类,那么在将来项目中,就有可能出现继承冲突。

 2:由于继承了Thread后需要重写run方法来定义线程要执行的任务,这就导致线程与任务有一个强耦合关系,当前线程就只能做run方法中定义的任务,其他事情做不了,这不利于线程的重用。

第二种创建线程的方式

 定义一个类并实现Runnable接口来单独定义线程要执行的任务。

此外,还可以使用匿名内部类实现两种创建线程的方式。

三、相关API

Thread提供了一个静态方法static Thread currentThread(),该方法是用来获取运行这个方法的线程。 java中所有的代码都是由线程运行的,当需要获取某个线程时,只需使它执行上述方法即可。在哪个方法中定义代码,获取的就是运行该方法的线程。

Long getId();线程ID

String  getName();获取名字

int  getPriority();查看优先级

boolean isAlive();是否活着

    boolean isDaemon();是否为守护线程

    boolean isInterrupted();是否被中断了

四、操作线程

1)线程的优先级

线程不能干涉线程调度的工作,即:线程不能决定时间片分配给哪个线程,也不能决定分配的具体次数。但是可以通过改变线程的优先级来获取更高的CPU时间片几率。线程优先级分为10个等级,对应数字为1-10,其中1最低,5默认,10最高。理论上优先级越高的线程,获取CPU时间片的次数多。

(2)线程的休眠

Thread提供了静态方法 static void sleep(long ms),该方法会将执行该方法的线程进入阻塞状态执行的毫秒数,在该毫秒数内不会进入就绪状态,醒来后并不能保证进入运行状态,只能保证进入就绪状态。

(3)线程的加入

void join(),线程提供了一个方法join,该方法允许一个线程在另一个线程上等待,直到它的工作都结束,才继续当前线程的后续工作。否则一直处于阻塞状态。

(4)线程的中断

         可以使用Thread类中的interrupt()方法使线程离开run()方法。

(5)线程的同步

         线程安全问题来源于两个线程同时存取单一对象的数据。

         当一个方法被synchronized修饰后,该方法称为"同步方法",意思是说当前方法不能同时被两个以上的线程执行。多线程并发安全问题的本质就是多个线程发生了""

情况。有效缩小同步范围可以在保证并发安全的前提下提高并发效率。

   同步块需要指定同步监视器(上锁的对象),若希望该同步块有效果,必须保证多个线程看到的锁对象相同,通常使用this即可。

 互斥锁

 synchronized修饰的是两段代码,但是锁对象相同。那么这两段代码就是互斥的。

<!--EndFragment-->
相关标签: java 多线程