zoukankan      html  css  js  c++  java
  • 线程

    线程三个非常重要的概念

    程序:一组写好的静态的代码

    进程:正在进行的程序,很多线程同时执行

    线程:是进程内的最小单位,很多线程同时进行

    需要掌握线程的几种不同状态 以及如何切换

     new对象           start()    CPU分配run()   wait()          exception

    创建线程(对象)   就绪状态    执行状态     等待/挂起    异常/消亡

                          |                         |           

                          |__________________________|

                            notify /notifyAll

    如何实现

    自定义一个类 

    继承Tread   实现Runnable

    重写run方法

    调用的是start方法     需要注意的是start 方法Thread类中

    购票例子利用Vector集合 线程安全  多个线程并发操作同一个集合  不会抢资源

    生产消费模型

    自己解决一下线程安全问题

    让仓库对象被线程访问的时候  仓库对象被锁定

    仓库对象只能被一个线程访问  其他的线程处于等待状态

    特征修饰符

    synchronized  (中文同步的意思) 一个时间点  只有一个线程访问

    线程安全锁

    两种形式写法

    1.将synchronized关键字  放在方法结构上

    Public synchronized void get(){

    }

    放在方法上锁定的是调用方法时的那个对象   

    2.将synchronized关键字放在方法(构造方法的内部)

    public void get(){

    好多代码

    synchronized(对象){

    好多代码

    }

    好多代码

    }

    第二中性能较好些 灵活

    我们觉得return不是很好

             应该让线程的不同状态来切换

             执行  等待   执行  等待

             wait   Object类中等方法

             对象.wait();

             对象.wait();不是当前对象的wait

                                 是访问当前这个对象的线程wait

    产生一个类似假死的状态

    所有线程都进入等待状态  没有线程做事

             notify notifyAll  Object 类中的方法

    //设置线程的级别(1-10)
    p.setPriority(10);                       p.getPriority()

             Thread.sleep();

             run();

             start();

    通过上述的生产消费者模型

    做一个非常完整而且安全的模型

    1.利用线程安全锁  特征修饰符synchronized

             两种不同的写法

             不管怎么写 锁定的永远是对象

    2利用方法控制线程状态来回切换

    wait   

    notify  notifyAll

    上述的三个方法都是Object类方法

    3.Thread类中的方法

    sleep    静态方法(参数 long 毫秒)

             setPriority(10);  getPriority()

    设置/获取线程的优先级  1- 10

    数字越高  优先级越高 更容易获取CPU分配的资源碎片

    4笔试题

             程序 进程  线程概念区别

             线程创建方式

    线程的几种状态如何切换

    sleep方法  wait方法:

    (1)类   Thread   Object

    (2)方法的调用  静态.类名    对象

    (3)理解    哪个位置调用    对象调用方法

     哪个线程等待.    访问对象的其他线程等待

             (4)唤醒  不需要别人    需要其他对象调用notify唤醒

             (5)锁   不会释放锁     等待后会释放锁   

    5join方法Thread类中的方法

             让多个线程同步执行  变成单个线程

    6死锁

    demo

    链接:https://pan.baidu.com/s/1dZ3AnS1bfPz5fKMtsNURtQ 
    提取码:2i50 

  • 相关阅读:
    基于Windows Mobile 5.0的GPS应用程序开发
    iis6应用程序池被自动禁用问题 应用程序池'DefaultAppPool' 被自动禁用
    Axapta物流模块深度历险(八)
    AX的报表服务器(一)
    AX的企业门户(一)
    SQL Server2005 Reporting Services 管理站点
    SQL Server2005 Reporting Services的卸载
    耐心的解决问题
    危险操作符
    慢慢的坚持啊
  • 原文地址:https://www.cnblogs.com/mzdljgz/p/11250785.html
Copyright © 2011-2022 走看看