第十一周学习视频
Posted caihan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十一周学习视频相关的知识,希望对你有一定的参考价值。
一、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的网络通信的基本操 作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。因此,套接字的应用可以简化服务器与客户端之间通信的网络编程。
对于一个特定的网络连接,连接两端的计算机中各有一个套接字,这两个套接字之间有一条网络线路。
服务端程序和客户端程序都通过套接字与网络线路打交道,从而可以忽略网络线路的硬件细节。
十二、端口
端口号可以是0~65535之间的一个数。
大多数操作系统都将1024以内的端口号保留给系统服务,因此一般情况下不应将这些端口指定成用户程序中的连接端口。
十三、面向连接的客户/服务器编程
基于TCP协议,使用流套接字创建客户端、服务端程序,使其彼此间能进行通信。
十四、建立简单的服务器
Java提供ServerSocket类,方便的进行服务器端程序的编写。
服务端的工作原理:等待连接->接受连接。
某个连接被接受后就表现为正常的套接字,形式为Socket对象,然后将输入/输出流关联到这些连接上,进行读写工作。
以上是关于第十一周学习视频的主要内容,如果未能解决你的问题,请参考以下文章