当前位置:网站首页 > Java基础 > 正文

java基础知识 线程

null



  1. 如何使用多线程
  2. 如何得到多线程的一些信息
  3. 如何停止线程
  4. 如何暂停线程
  5. 线程的一些其他用法

所有的代码均可以在char01

如何使用多线程

启动线程的两种方式

Java 提供了2种方式来使用多线程, 一种是编写一个类来继承Thread,然后覆写run方法,然后调用start方法来启动线程。这时这个类就会以另一个线程的方式来运行run方法里面的代码。另一种是编写一个类来实现Runnable接口,然后实现java基础知识 线程接口方法,然后创造一个Thread对象,把实现了Runnable接口的类当做构造参数,传入Thread对象,最后该Thread对象调用start方法。
这里的start方法是一个有启动功能的方法,该方法内部回调run方法。所以,只有调用了start方法才会启动另一个线程,直接调用run方法,还是在同一个线程中执行run,而不是在另一个线程执行run
此外,start方法只是告诉虚拟机,该线程可以启动了,也就说该线程在就绪的状态,但不代表调用start就立即运行了,这要等待JVM来决定什么时候执行这个线程。也就是说,如果有两个线程A,B ,A先调用start,B后调用start,不代表A线程先运行,B线程后运行。这都是由JVM决定了,可以认为是随机启动。
下面我们用实际的代码,来说明两种启动线程的方式:
第一种,继承Thread

 
 

测试的代码可以看test目录下的类。

如何得到多线程的一些信息

我们在启动多线程之后,希望能通过一些API得到启动的线程的一些信息。JDK给我们提供了一个Thread类的方法来得到线程的一些信息。

  • 线程的名字 ——
  • 线程的ID ——
  • 线程是否存活 ——

得到线程的名字

这些方法是属于Thread的内部方法,所以我们可以用两种方式调用这些方法,一个是我们的类继承Thread来使用多线程的时候,可以用过this来调用。另一种是通过 来调用这些方法。但是这两个方法在不同的使用场景下是有区别的。
我们先简单来看两个方法的使用。
第一个的使用,代码如下:

 

测试的代码如下:

 

结果如下:

 
 

测试代码如下:

 

结果如下:

 

得到线程的ID

判断线程是否存活

 

测试方法如下:

 

结果如下:

 

我们可以发现在start之前,该线程被认为是没有存活,然后run的时候,是存活的,等run方法执行完,又被认为是不存活的。

如何停止线程

判断线程是否终止

JDK提供了一些方法来判断线程是否终止 ——

停止线程的方式

这个是得到线程信息中比较重要的一个方法了,因为这个和终止线程的方法相关联。先说一下终止线程的几种方式:

  1. 等待run方法执行完
  2. 线程对象调用stop()
  3. 线程对象调用interrupt(),在该线程的run方法中判断是否终止,抛出一个终止异常终止。
  4. 线程对象调用interrupt(),在该线程的run方法中判断是否终止,以return语句结束。

第一种就不说了,第二种stop()方法已经废弃了,因为可能会产生如下原因:

  1. 强制结束线程,该线程应该做的清理工作,无法完成。
  2. 强制结束线程,该线程已操作的加锁对象强制解锁,造成数据不一致。
    具体的例子可以看以及他的测试类
 

测试的代码如下:

 

如何暂停线程

在JDK中提供了以下两个方法用来暂停线程和恢复线程。

  • suspend()——暂停线程
  • resume()——恢复线程

这两个方法和stop方法一样是被废弃的方法,其用法和stop一样,暴力的暂停线程和恢复线程。这两个方法之所以是废弃的主要由以下两个原因:

  1. 线程持有锁定的公共资源的情况下,一旦被暂停,则公共资源无法被其他线程所持有。
  2. 线程强制暂停,导致该线程执行的操作没有执行完全,这时访问该线程的数据会出现数据不一致。

线程的一些其他用法

线程的其他的一些基础用法如下:

  1. 线程让步
  2. 设置线程的优先级
  3. 守护线程

线程让步

设置线程的优先级

我们可以设置线程的优先级来让CPU尽可能的将执行的资源给优先级高的线程。Java设置了1-10这10个优先级,又有三个静态变量来提供三个优先级:

 

下面说一下优先级的一些规则:

  1. 优先级高的线程一般会比优先级低的线程获得更多的CPU资源,但是不代表优先级高的任务一定先于优先级低的任务先执行完。因为不同优先级的线程中run方法内容可能不一样。
  2. 优先级高的线程一定会比优先级低的线程执行的快。如果两个线程是一样的run方法,但是优先级不一样,确实优先级高的线程先执行完。

线程守护

总结

null

版权声明


相关文章:

  • java基础知识点总结笔记2024-10-19 12:18:02
  • java基础小知识讲解2024-10-19 12:18:02
  • java基础知识多线程同步锁2024-10-19 12:18:02
  • java语言要掌握哪些基础2024-10-19 12:18:02
  • 尚学堂的java基础书2024-10-19 12:18:02
  • 零基础java爬虫2024-10-19 12:18:02
  • java基础知识都有哪些内容2024-10-19 12:18:02
  • java基础并发的三大特性2024-10-19 12:18:02
  • java基础课程要不要留级2024-10-19 12:18:02
  • 大数据有java基础的薪资多少2024-10-19 12:18:02