随笔分类 - Java
摘要:传统的IO Java中的InputStream、OutputStream、Reader、Writer这样的面向流的输入输出系统被视为传统的IO。传统的IO是阻塞式的输入输出,并且是通过字节的移动来处理的,即传统的IO一次只能处理一个字节,效率不高。 新IO 新IO和传统的IO有相同的目的,都是用于进行输入输出功能。但是新IO采用内存映射文件的方式来处理输入输出,新IO将文件或文件的一段区域映射到内...
阅读全文
摘要:通常,使用关闭输出流来表示输出已经结束。但在进行网络通信时则不能这样做。因为我们关闭输出流时,该输出流对应的Socket也将随之关闭,这样程序将无法再从该socket中读取数据。 为了应付这种情况,socket提供了两个半关闭的方法用来只关闭socket的输入流或者输出流,用以表示输出数据已经发送完成。方法详情: shutdownInput():关闭该socket的输入流,程序还可以通过该sock...
阅读全文
摘要:系统启动一个新线程成本比较高,当程序中需要创建大量生存期很短暂的线程时,使用线程池可以很好的提高性能。 与数据库连接池类似的是,线程池在系统启动时及创建大量空闲的线程。程序将一个Runnable对象传递给线程池,线程就会启动一条线程来执行该对象的run方法。当run方法执行结束后,该线程并不会死亡,而是返回线程池成为空闲状态,等待执行下一个Runnable对象的run方法。 创建线程池 Java提...
阅读全文
摘要:Person类:package com.zhyea.olproxy.socket;import java.io.Serializable;public class Person implements Serializable { private static final long se...
阅读全文
摘要:已知的创建多线程的方法有继承Tread类和实现Runnable方法。此外Java还提供了Callable接口,Callable接口也提供了一个call()方法来做为线程执行体。但是call()方法与run()方法有些不同: call()方法可以有返回值 call()方法可以抛出异常 不过Java不允许Callable对象直接作为Thread的target。而且call()方法还有一个返回值——...
阅读全文
摘要:Java使用ThreadGroup来表示线程组,用以对一批线程进行分类管理。 Java允许程序对线程组直接进行控制,对线程组的控制相当于同时控制这批线程; 用户创建的所有线程都属于指定线程组,如果程序没有显式指定线程属于哪个线程组,则该线程属于默认线程组; 默认情况下,子线程和创建它的父线程处于同一个线程组内; 一旦某个线程加入指定线程组后,该线程将一直属于该线程组,直到该线程死亡,线程不能中途...
阅读全文
摘要:第二步:实现文件传递。 上一步只是从服务端传递了一个字符串到客户端,这次需要对代码进行调整,实现从服务端获取文件,在客户端将文件存入目标地址。 调整后的代码: 服务端: import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInp...
阅读全文
摘要:当线程在系统内运行时,程序通常无法准确控制线程的轮换执行,但是可以通过一些机制来保证线程协调运行。 由同步监视器对象协调线程 实现这种功能可以借助于Object类提供的wait()、notify()、notifyAll()三个方法(注意,这三个方法属于Object类,不属于Thread类)。这三个方法必须由同步监视器来调用,可以分为两种情况: 对于同步方法,同步监视器默认是当前实例(this),...
阅读全文
摘要:第一步: 建立服务端客户端,实现端到端通信。因为要传递文件,信号量较大,故使用TCP/IP协议。 服务端和客户端都要建立socket,而后通过socket进行通信。目前只实现服务端到客户端的单向通信。 服务端代码如下: import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket; ...
阅读全文
摘要:如题,使用Java模拟GET和POST请求。使用GET可以实现网页抓取,使用POST可以实现对某些网站登录的暴力破解。不过仅是练习,实际意义不大。 import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
impo...
阅读全文
摘要:/** * 排序方法整理 * @author zhyea * */
public class Sort { /** * 冒泡排序,从小到大。 * 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换。循环走访序列直到不需要比较。稳定排序。 * @param arr * 待排序的数组 */ pub...
阅读全文
摘要:多线程操作同一个对象时,容易引发线程安全问题。为了解决线程安全问题,Java多线程引入了同步监视器。同步代码块同步代码块语法格式如下:synchronized(obj){ //此处的代码即为同步代码块}上面语法格式中synchronized后面括号的obj就是同步监视器,上面代码的含义是:线程...
阅读全文
摘要:join线程在某个线程的执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的线程完成为止。join()方法有三种重载形式:join():等待被join的线程执行完成;join(long millis):等待被join线程执行时间最长为millis毫秒。如在mill...
阅读全文
摘要:计算机网络分层模型OSI分层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;TCP/IP分层模型:物理+数据链路层、网络层、传输层、应用层;IP地址IP地址是一个32位的整数。通常为了便于表示,会将之分为四个8位的二进制整数,每个8位的二进制整数又可表示为一个0~255的十进制数字...
阅读全文
摘要:线程的生命周期分为:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Dead)五个阶段。线程启动后,随着CPU的调度,线程会在运行和阻塞两种状态间切换。新建:使用new关键字创建一个线程后,线程就处于新建状态;就绪:线程对象调用start方法后,线程处...
阅读全文
摘要:需求说明:使用Java抓取网页信息,并以字符串的形式返回。 使用Java代码实现: package net.ibuluo.spider.util; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import ...
阅读全文
摘要:Java中有四种访问权限,从大到小依次是:public –> protected –> default(friendly) –> private。 简单说明下: public 作用域是全局; protected 作用域是类内部、同一包下、子类下; default 或称friendly,作用域是类内部、同一包下; private 作用域仅是类内部。 也可见下图:
阅读全文
浙公网安备 33010602011771号