第十一周学习视频(一)

一、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对象,然后将输入/输出流关联到这些连接上,进行读写工作。

posted @ 2020-04-26 10:12  大萌神  阅读(136)  评论(0编辑  收藏  举报