zoukankan      html  css  js  c++  java
  • 多线程编程

    多任务处理有两种类型:

    1、进程:指代一个独立的运行程序,独立的内存地址空间,CPU在进程间来回切换

    2、线程:进程内部的一个运行分支,同一个进程中的线程共享内存地址空间,CPU在线程间也是来回切换,线程的切换比进程切换效率高

    创建和启动线程:

    1、实现方式1 : 继承Thread类,并重写run方法,在run方法中写入要执行的代码

    需调用start方法启动线程,由start方法调用run方法,如果直接调用run方法则没有        

    开启线程

    2、实现方式2 : 实现Runnable接口,重写run方法,在run方法中写入要执行的代码

    线程状态:

    一、新建 ----new Thread

    二、就绪 ----调用start(),在start()调用run()之前

    三、运行 ----run()执行期间

    四、中断 ----在run()执行期间,该线程没有被CPU执行的时间

    中断原因:

    1、没有抢到CPU

    2、阻塞

    3、休眠 Thread.sleep(休眠的毫秒数);

    4、等待—唤醒        wait()等待,notify()唤醒,notifyAll()唤醒所有

    5、挂起 yield();

    注意:1、中断结束之后线程会去抢夺CPU,如果没抢到则继续中断

        2、默认情况下,所有线程优先级一样

    Thread类的setPriority()可以设置线程优先级,默认值都为5,最高10级,最低1级,优先级高则代表被CPU选中的几率高,不一定都是先执行的

    五、死亡 ----run()执行结束之后,回收资源

    线程安全性:

    线程同步:关键字synchronized

    1、同步方法:一次只能被一个线程使用,该线程没有执行完,其他线程只能等待。

    在资源类的方法中加关键字synchronized

    2、同步块:

    死锁:

    当两个线程循环依赖于一对同步对象时将发生死锁。

    线程间通讯:

    wait();

    notify();

  • 相关阅读:
    用numpy实现CNN卷积神经网络
    用numpy实现BP神经网络
    扩展域并查集学习笔记
    My Blog问卷
    二叉搜索树(BST)学习笔记
    我的代码风格
    substr函数学习
    memset与fill的区别
    快读快写
    洛谷题解 CF777A 【Shell Game】
  • 原文地址:https://www.cnblogs.com/wuhao-bky/p/6611390.html
Copyright © 2011-2022 走看看