11.6(day22) 线程 线程安全 线程生命周期 消费者和生产者 网络编程

线程:

    可独立运行的代码片段。

    属于进程。

多线程:

    一个进程中有多个可独立运行的代码片段。

主线程:main

子线程:

    继承Thread类

    实现Runnable接口

        ---run

    开启线程:

        start

线程安全问题:

    多线程操作同一个共享资源,还有多行代码编写,其中一个线程对其没有执行完,另一个线程参与执行,有可能导致错误数据产生。

    同步代码块

线程生命周期:

    新建  可运行  正在运行  消亡

    阻塞:

      sleep(time)

      wait(), notify()/notifyAll()

消费者和生产者:

    生产线程和消费线程,操作同一个资源,但是操作的任务不同

    wait:使线程处于等待状态,并且会释放锁

    notify:唤醒处于等待状态的线程

    notifyAll:唤醒所有处于等待状态的线程

    以上三个方法是定义在Object类中,必须用在同步中

 

    jdk5.0后对以上关于锁和线程等待和唤醒方法有优化,使用Lock接口手动获取和释放锁,使用Condition替代了等待和唤醒的方法。

    final  Lock  lock = new ReentrantLock();  //获取锁对象

    final  Condition 生产 = lock.newCondition();  //锁对象与生产线程进行绑定

    final  Condition 消费 = lock.newCondition();  //锁对象与消费线程进行绑定

 

    public  void  save(){

      lock.lock(); //获取锁

      try{

        if(str != null)

          生产.await(); //等待

        ......

        消费.signal(); //唤醒

        消费.signalAll();

      }finally{

        lock.unlock(); //释放锁

      }

    }

 

sleep(time):Thread类中的静态方法,使当前线程休眠一段时间,时间是毫秒值

wait():Object类中的实例方法,使当前线程处于等待状态,需要被唤醒

网络编程:

    java.net

    网络通信要素:

       IP地址,端口号(1-65535  1-1024),协议(TCP、UDP)

    UDP:

       面向无连接,不可靠协议,速度快

       数据以数据报包进行发送,不能超过64k

    TCP:

       面向有连接,可考协议,速度慢

       可以发送大量数据

       "三次握手"

    IP对象

 

 

 

posted on 2018-11-06 20:44  /a_a/  阅读(117)  评论(0编辑  收藏  举报

导航