您的位置 首页 > 数码极客

【cpu线程数是什么作用】线程的基础知识

基本概念

CPU核心数和线程数之间的关系:核心数:线程数=1:1;使用超线程技术可以达到1:2。CPU时间切片旋转机制:导致上下文切换过程的RR调度机制:程序运行资源分配的最小单元进程内部有多个线程,在运行时共享进程的资源线程。CPU调度的最小单位,线程必须根据进程存在。

  • 并行:同一时刻,可以同时处理事情的能力。
  • 并发:与单位时间相关;单位时间内能处理事情的能力

  • CPU --->线程


    并发编程的优缺点

    • 优点:能够充分利用CPU的资源、加快用户响应的时间,程序模块化,异步化
    • 缺点:线程共享资源,存在冲突;容易导致死锁;启动太多的线程,就有可能导致服务器宕机。

    Java线程

    • Java开启线程的方式:

    继承Thread类 重写run方法;

    public class UseThread extends Thread{ public UseThread(String name) { super(name); } @Override public void run() { String threadName = T().getName(); while(true) { Sy(threadName+" is run!"); } //Sy(threadName+" interrput flag is "+isInterrupted()); } } public static void main(String[] args) throws InterruptedException { Thread endThread = new UseThread("endThread"); endT() }

    实现Runable接口,重新run方法

    public class UseRunnable implements Runnable{ @Override public void run() { //doSomeThing } public static void main(String[] args) { UseRunnable useRunnable = new UseRunnable(); Thread endThread = new Thread(useRunnable,"endThread"); endT(); } }

    实现Callable接口,重新call方法

    /*实现Callable接口,允许有返回值*/ private static class UseCallable implements Callable<Integer>{ private int sum; @Override public Integer call() throws Exception { //doSomeThing } public static void main(String[] args) { UseCallable useCallable = new UseCallable(); FutureTask<Integer> futureTask = new FutureTask<Integer>(useCallable); new Thread(futureTask).start(); } }
    • Java停止线程的方式

    stop()、resume()、suspend() 等三种方式;

    stop():会导致线程资源不能正常的释放;suspend():容易导致死锁

    线程要怎样才能安全的停止呢?

    答:线程自然终止:线程执行完毕或者抛出异常结束

    注意:Java线程是协作方式运行,并非抢占模式。

    • Java线程中断

    interrupt():调用一个interupt()方法中断一个线程,并不是强行关闭这个线程;只是跟这个线程打了一个招呼;将线程中的中断表示改为true,线程是否中断,由线程本身决定。

    isInterrupted()判断当前线程是否处于中断状态,同时中断的状态改为false方法里如果抛出InterruptedException,线程的中断标志位会被复位成false,如果确实是需要中断线程,要求我们自己在catch语句块里再次调用interrupt()


    线程的状态

    • 线程只有5种状态。整个生命周期就是这几种状态的切换。


    线程的状态切换图


    线程常用方法

    • run()和start() :run方法就是普通对象的普通方法,只有调用了start()后,Java才会将线程对象和操作系统中实际的线程进行映射,再来执行run方法。
    • yield() :让出cpu的执行权,将线程从运行转到可运行状态,但是下个时间片,该线程依然有可能被再次选中运行。

    线程的优先级

    取值1~10,缺省值为5,但是线程的优先级不可靠,在开发过程中不建议使用线程的优先级进行开发。

    守护进程

    和主线程同死,finally代码块不一定会被执行到。

    责任编辑: 鲁达

    1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
    2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
    3.本站属于非营利性站点无毒无广告,请读者放心使用!

    推荐阅读