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

    一,多线程
      1,并发与并行
        并行:两个或两个以上的事件,同一时刻发生(同时进行)
        并发:两个或两个以上的事件,同一时间段内发生(交替进行)
      2,进程与线程
        进程:进入到内存中的应用程序、软件,这个过程叫做进程。
        线程:进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个程序是可以有多个线程的,这个程序就可以称作多线程。
      3,主线程
        主线程:执行main方法的线程。
        单线程:程序执行从main方法开始,从上到下执行。
        原理:java程序进入内存,jvm先执行main方法,jvm会找操作系统开辟main方法---》通向CPU的路径,CPU就会通过这个路径main执行代码
      4,创建线程类
        概述:
          java.lang.Thread 类代表线程,所有的线程对象都必须是Thread的类或是其子类。
        创建步骤:
          1,继承Thread类
          2,重写run(); 方法
          3,创建Thread子类的实例,即使创建了线程对象
          4,调用 对象.start();方法
        获取线程名:
          1,Thread类中,有getName(); 返回该线程名称 String name
          2,获取当前正在执行的线程名称 currentThread();返回当前正在执行的线程对象,再通过 对象.getName(); 获取名称
        设置线程名:
          1,通过父类构造器,把名字String name传参到其中,super(name);
          2,通过 对象.set(name);方法
        休眠:
          sleep(long seconds); 执行的是线程休眠
      5,实现类接口方式创建线程
        概述:
          java.lang.Runnable 接口可通过被实现类实现方式,创建线程
        步骤:
          1,创建实现类实现Runnable接口
          2,重写run();方法----》方法中是新线程执行的代码
          3,创建Runnable实现类的对象
          4,创建Thread类对象,构造器中传参(Runnable实现类 对象)
          5,调用Thread类对象.start();方法,开启新的线程,执行run();
        作用:
          1,一个类如果继承Thread类,就不能继承其他类了
          2,一个类实现Runnable接口还可以继续继承其他类,提高可重用性
     
    二,线程安全
      概述:
        如果有多个线程同时运行,而这些线程同时运行这段这段代码,如果程序运行的结果和单线程结果一样,而且运行的结果和预期效果也是一样的,我们成线程安全。否则,线程存在安全问题。
        当我们使用多个线程访问同一个源,并且多个线程中对资源有写的操作,就容易出现线程安全问题。
      解决:
        java中提供了同步来解决线程安全问题。 synchronized
      使用:
        1,同步代码块
          synchronized(锁对象){
            出现安全问题代码块
          }
          步骤:
            1》在成员位置创建 锁对象
            2》把锁对象添加到()中
            3》问题代码块添加到{ }中
          注意:
            1,创建的锁对象可以是任意对象,Object obj =new Object();
            2,必须保证多个线程使用的是同一个锁对象
            3,把{ }只让一个线程进
     
        2,同步方法
          步骤:
            1》创建一个方法,修饰符添加 synchronized
            2》把访问了共享数据的代码块放入该方法中
            3》调用方法
        3,Lock锁
          概述:
            Lock接口中,有lock();上锁 unlock();解锁的方法
          步骤:
            1》在成员位置创建Lock的实现类, ReentrantLock
            2》在可能会出现问题的代码前面, 调用 lock();方法加锁
            3》在可能会出现问题的代码后面,调用 unlock();方法解锁,释放锁
     
    三,线程状态
      API中,java.lang.Thread.State 帮助手册
      概述:
        当线程被new 创建后,不是立即执行的,线程存在多种状态
        New         线程新建状态,但未被启动
        Runnable       可运行,在JVM里的状态
        Blocked       阻塞
        Waiting       无限等待,一个线程在等待另一个线程唤醒
        Timed_Waiting   计时等待
        Terminated     被终止,因run();结束,正常退出而死亡
  • 相关阅读:
    jquery实现页面的搜索功能
    url中的查询字符串的参数解析
    5.14日学习内容1:jquery表单相关知识
    5.12日北京“咖啡陪你”咖啡吧学习笔记
    layui基础上的tree菜单动态渲染;
    H5area的热区锚点随着图片的尺寸而变化
    Python3基础 raise 产生RuntimeError 异常
    Python3基础 raise + 指定类型异常+异常的解释 产生特定类型异常
    Python3基础 判断变量大于一个数并且小于另外一个数
    Python3基础 内嵌函数 简单示例
  • 原文地址:https://www.cnblogs.com/kide1412/p/10992966.html
Copyright © 2011-2022 走看看