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

多线程

时间:2018-09-06 14:45:56      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:class   ext   system   分配   ++   创建   dstat   col   基本   

1. 多线程

进程:正在运行的程序,是系统进行资源和调度的独立单位,每一进程都有独立的内存空间和系统资源

多进程的意义:单进程的计算机只能做一件事情,多进程可以执行多个进程 ,提供CPU的使用率,实际是CPU在不同进程之间的高效切换

线程:在同一个进程内可以执行多个任务,而每一个任务都可以看成是一个线程,是程序的执行单元,执行路径,是程序使用CPU的最基本单位,多线程有多条执行路径

多线程的意义:提供程序的使用率,程序的执行都是在抢CPU的执行权,线程的执行具有随机性

Java程序的运行原理:由java命令启动JVM,JVM启动相当于启动了一个进程

JVM虚拟机的启动时单线程的,垃圾回收线程也要启动,最少需要启动两个 线程

2. 多线程实现

2.1 继承Thread类,该子类重写run()方法,创建对象,启动线程

run()和start()的区别:

run():仅仅是封装被线程执行的代码,调用时普通方法。

start():首先启动了线程,然后再由JVM去调用线程的run()方法

    public static void main(String[] args){
        MyThread my1 = new MyThread();
        MyThread my2 = new MyThread();

      my1.setName("xiaojignzi");
      my2.setName("xiaojunzi");

        my1.start();
        //my1.start();    IllegalThreadStateException:非法的线程状态异常,相当于一个线程被调用了两次
        my2.start();
    }

获取线程对象的名称

public class MyThread extends Thread {
    @Override
    public void run(){
        for(int x = 0; x < 100; x++){
            System.out.println(getName() + "-----" + x);
        }
    }
}

如何获取main方法所在的线程对象的名称

Thread.currentThread().getName()

线程的调度

计算机只有一个CPU时,CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。

线程具有两种调度模型

1. 分时调度模型:所有的线程轮流调用CPU的使用权,平均分配给每个线程占用CPU的时间片

2. 抢占式调度模型,优先让优先级高的线程使用CPU,如果线程的优先级相同会随机选择一个,优先级高的线程获取CPU时间片相对多一些

java使用抢占式调度模型

多线程

标签:class   ext   system   分配   ++   创建   dstat   col   基本   

原文地址:https://www.cnblogs.com/feng-ying/p/9597675.html

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