• 第十一周学习视频(一)


    一、Lock接口、ReentrantLock

    调用Lock接口的lock方法的线程,能够获得对象锁。当线程调用unlock方法时,会释放对象锁。
    可重入锁ReentrantLock是Lock接口的基本实现。

    public void some_method() 
    { 
            reentrantlock.lock(); 
            try
            { 
                //Do some work 
            } 
            catch(Exception e) 
            { 
                e.printStackTrace(); 
            } 
            finally
            { 
                reentrantlock.unlock(); 
            } //始终在finally块中调用unlock语句,以确保即使在方法体中抛出异常(try块)也会释放锁定
              
    }
    

    二、条件对象与Condition接口

    对于拥有Lock对象的线程,如果它在某个条件上不满足时不能往下执行,就可以在这个条件上等待。
    利用Lock对象,可以显式地声明需要线程等待的条件对象。
    条件对象通过调用Lock的newCondition方法创建。
    线程可以调用Conditon的await方法,立即释放相关联的Lock,将线程置于这个Conditon的等待状态中。
    当可运行线程运行完毕,并判断出线程可以继续运行时,会调用Conditon的signal,使处于这个Conditon的等待状态下的线程重新返回可运行状态,并可能重新获得Lock。

    三、Lock、Condition和Synchronized

    Lock、Condition可以显式地指明等待条件,使用户指定线程需要等待的多个条件。但是Lock、Condition容易出错,一般情况下最好使用Synchronized。

    四、多线程同步中的静态和非静态方法

    将静态方法加Synchronized,则相应的同步方法会与该方法所在类的“类对象”关联,受类对象锁的控制。
    将非静态方法加Synchronized,则相应的同步方法会与该方法所在类的某个实例对象关联,受实例对象锁的控制。

    五、死锁问题

    由于设计不合理而造成所有线程都陷入阻塞或等待状态。

    六、GUI的多线程

    用于swing组件的事件派发线程,是界面的主线程。
    同时,事件派发线程也是调用paint和update等回调方法的线程。
    方法一:SwingUtilities提供了两个方法:invokeLater和invoteAndWait,它们都向Swing事件队列上发送Runnable对象。其效果是允许事件派发线程调用另一个线程的任意一个代码块。
    方法二:使用SwingWorker类。

    七、网络编程

    实现进程与进程之间的通信:获取对方IP地址、对方端口号。

    八、利用Java进行网络程序设计

    Java提供了大量内置的网络操作功能,包含于java.net包中。
    通过这个包提供的类和接口,可以实现基于“流”的通信,或者基于“包”的通信。

    九、高层的网络通信--URL

    URL是统一资源定位符(Uniform Resource Locator)的简称,URL表示Internet上某一资源的地址。
    当创建URL时发生错误,系统会产生异常 MalformedURLException,这是非运行时异常,必须在程序中捕获处理。

      URL url1,url2,url3;
      try{
         url1 = new URL(“file:/D:/image/example.gif”);
         url2 = new URL(“http://sc.ccit.js.cn/map/”);
         url3 = new URL(url2, “test.gif”);
      } catch(MalformedURLException e) {
         DisplayErrorMessage();
      } 
    
    contentsArea.addHyperlinkListener( new HyperlinkListener() {
         public void hyperlinkUpdate( HyperlinkEvent event ){
            if ( event.getEventType() == HyperlinkEvent.EventType. ACTIVATED ) 
            getThePage( event.getURL().toString() );
         }
    }); //HyperlinkEvent的监听器及其定义的处理方法
    

    HyperlinkEvent包含一个公共嵌套类EventType,声明了三个静态变量代表超链接事件类型。ACTIVATED:单击超链接改变web页面;ENTERED:用户鼠标移过超链接;EXITED:用户鼠标移开超链接


    contentsArea.setPage( location ); //JEditorPane的方法setPage()下载由 location指定的文档,并将其显示在 JEditorPane中。

    十、IP层的网络通信--IP地址

    IP地址由32 位或 128 位无符号数字构成,可以唯一确定Internet上一台主机。 java.net包中的“InetAddress”类,用于表示网络中计算机的主机名和IP地址表示网络中计算机的主机名和IP地址。
    下述静态方法可返回一个InetAddress对象:
    getByName( String host ) 、getLocalHost()、getByAddress( S t r i n g h o s t , b y t e [ ] a d d r ) 、getAllByName( String host )

    十一、套接字

    套接字(Socket)是对网络通信介质的一种软件抽象,用来将网络数据流连接到程序上。
    套接字是支持TCP/IP的网络通信的基本操 作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。因此,套接字的应用可以简化服务器与客户端之间通信的网络编程。
    对于一个特定的网络连接,连接两端的计算机中各有一个套接字,这两个套接字之间有一条网络线路。
    服务端程序和客户端程序都通过套接字与网络线路打交道,从而可以忽略网络线路的硬件细节。

    十二、Java中的套接字

    Java中使用了两套类来实现套接字,分别基于不同的协议。
    (1)流套接字: Socket,ServerSocket
    流套接字使用传输控制协议(简称TCP)进行数据通信。提供的是面向连接的服务,通过TCP协议传 输,得到的是一个顺序的无差错的数据流,具有较高的可靠性。
    (1)数据报套接字: DategramSocket
    数据报套接字使用用户数据报协议(User Datagram Protocol,简称UDP),它不能保证数据的无损传输,是无连接的服务。

    十三、端口

    端口号可以是0~65535之间的一个数。
    大多数操作系统都将1024以内的端口号保留给系统服务,因此一般情况下不应将这些端口指定成用户程序中的连接端口。

    十四、面向连接的客户/服务器编程

    基于TCP协议,使用流套接字创建客户端、服务端程序,使其彼此间能进行通信。

    十五、建立简单的服务器

    Java提供ServerSocket类,方便的进行服务器端程序的编写。
    服务端的工作原理:等待连接->接受连接。
    某个连接被接受后就表现为正常的套接字,形式为Socket对象,然后将输入/输出流关联到这些连接上,进行读写工作。

  • 相关阅读:
    【网络/通信】概念的理解 —— 带宽、吞吐量、净荷
    在线视频教程
    Topological Spaces(拓扑空间)
    Topological Spaces(拓扑空间)
    open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
    open ball、closed ball 与 open set、closed set(interior point,limit point)、dense set
    python 书籍推荐 三
    python 书籍推荐 二
    python 书籍推荐 一
    2015年你需要了解的15门编程语言
  • 原文地址:https://www.cnblogs.com/caihan/p/12777473.html
Copyright © 2020-2023  润新知