加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

多线程简述

发布时间:2020-12-15 07:16:20 所属栏目:Java 来源:网络整理
导读:一、JVM线程相关 当启动JVM时会启动一个进程,该进程会启动一个线程, JVM启动是多线程的 ,因为最低有两个线程启动了,主线程和垃圾回收线程。 二、多线程的实现 多线程的实现有两种方式: 1、继承Thread类 public class ThreadFristDemo extends Thread{ v

一、JVM线程相关

  当启动JVM时会启动一个进程,该进程会启动一个线程,JVM启动是多线程的,因为最低有两个线程启动了,主线程和垃圾回收线程。

二、多线程的实现

  多线程的实现有两种方式:

  1、继承Thread类

  

public class ThreadFristDemo extends Thread{

    void run(){
        System.out.println("thread");
    }
}

这种方式需要重写Thread类中的run()方法

  2、实现Runnable接口

class Runable1Demo implements Runnable{

     run() {
        
        System.out.println("runnable");
    }
    
}

当然只实现接口只是第二步要真正能执行还需要传递实例到Thread构造函数:

class RunnableDemoTest{
    Runnable1Demo t = new Runnable1Demo();
    Thread t1 =  Thread(t);
    Thread t2 =  Thread(t);
  // 启动线程
    t1.start();    
}

需要注意的是直接调用run()方法并不会启动线程而只是运行里面的代码,真正启动线程需要调用start()方法。

【为什么有个方式一还要有方式二呢,原因就在于java不支持多继承(幸亏不支持...),如果一个子类已经继承了一个父类,为了实现多线程那么就不能再继承Thread类,这时就只能靠实现Runnable接口了。另外由上边代码块中我们可以看到我们有两个Thread类实例t1和t2,所以实现接口方式适合多个相同程序的代码去处理同一资源(即String res)的情况,把线程同程序的代码、数据有效分离。】

?

三、线程的调度和优先级问题

  1、线程的调度

  java线程调度采用的是抢占式调度的方式,抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。

  2、优先级问题

  java线程优先级范围是1-10,默认是5,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。

  java中可用setPriority(int arg)方式设置优先级,getPriority()方式获取优先级。

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读