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

    由来:单任务os——多任务os
    cpu来回切换进程——cpu来回切换线程
    每一个进程都有分配独立的内存地址,(每一个程序就是一个进程)
    每一个进程包含多个线程,线程是进程内部的分支。
    同一个进程中的多个线程,共享地址内存空间。

    线程的实现方式一:
    继承Thread类,重写run方法
    开启线程,要调用start方法——该方法会自动分配资源,然后调用this.run()
    如果不是调用start方法,调用的是run方法——不会报错,只是普通的方法调用,不会开启新的线程。

    线程的实现方法二:
    实现Runnable接口,重写run方法
    创建Thread对象,把Runnable接口的实现类对象传入
    调用Thread对象的start方法

    线程的状态:
    新建状态 new Thread()
    就绪状态 调用start(),但还未自动调用run方法
    运行状态 start方法自动调用run方法《——》中断状态(在运行中,由于种种原因线程没有得到cpu的支持)
    死亡状态 run方法结束,进行资源回收清理

    线程中断的种种原因:
    1、线程的优先级(最高十级、最低一级、默认为五)——提高被cpu执行的几率
    2、由于输入/输出等待,造成线程进入中断状态——阻塞
    3、休眠状态——sleep状态
    4、等待与唤醒机制——来自object的wait、notify、notifyAll方法
    5、礼让——yield让线程由运行状态进入就绪状态
    sleep(0)与没有sleep(0)有区别,执行sleep(0),系统会重新计算优先级,进入cpu抢占模式。

    锁机制(同步锁)
    synchronized 可选修饰符,可以直接修饰方法
    当多个线程访问同一资源的时候,有可能造成该资源数据混乱
    同步方法:在资源身上加同步关键字synchronized
    同步块:在调用资源的线程身上加上synchronized
    过多的同步可能会产生死锁,死锁的解决办法:
    线程间通信(wait、notify、notifyAll)

    常见的线程:main主线程、gc线程、打印异常线程

  • 相关阅读:
    .Net中多线程类的使用和总结
    单例模式完整解析
    避免构造/析构函数调用虚函数(转)
    正则表达式
    序列化与反序列化
    数组的使用,指针的使用
    jmeter单接口和多接口测试
    HTML5 input placeholder 颜色修改
    h5动画效果总结
    8月份月度反思--做一个快乐的程序员
  • 原文地址:https://www.cnblogs.com/fengshaolingyun/p/6785081.html
Copyright © 2011-2022 走看看