暑期java学习笔记(二):多线程与网络通信

(观看网易云课堂---java300集大型视频做的笔记,都是里面的内容,整合了一下)

一、多线程

继承Thread,收到单继承的影响

常用Runnable接口,实现run()方法,不能抛出异常,没有返回值

实现Callable接口,重写call()方法,可以抛出异常,有返回值


join:合并两个线程;

  eg:线程B{

         线程A.join();//线程B等待A执行完在执行

  }


yield:静态方法,暂停本线程(不是停止,仍有机会被cpu调度)

  eg:线程A{ Thread.yield(); }//暂停本线程


sleep:静态方法,休眠一段时间,不释放锁。

  1)用在与时间相关:倒计时;

  2)模拟网络延迟;

public class CountDown {//倒计时

	public static void main(String[] args) throws InterruptedException {
		// TODO 自动生成的方法存根
		
		Date endTime = new Date(System.currentTimeMillis() + 10*1000);//获取当前时间
		long end = endTime.getTime();
		while(true) {
			
			System.out.println(new SimpleDateFormat("mm:ss").format(endTime));//按照特定格式打印时间
			endTime = new Date(endTime.getTime() - 1000);//时间推后1秒
			Thread.sleep(1000);//休眠10秒
			
			if(end - 10000 > endTime.getTime()) {
				break;
			}
			
		}

	}

}

currentThread:静态方法。获取当前线程的引用;

setName():设置线程名称;

getName():返回线程名称;

isAlive():返回线程状态,true&false;

setPriority设置优先级,不是绝对的优先级,而是概率;


同步:(synchronize)

1.同步块:

  synchronize(引用|this|类.class){}

2.同步方法:


(二)、网络编程

1.基础知识:

网络:将不同区域的计算机连接起来。

地址:IP地址,确定网络上一个绝对物理地址。

端口号:计算机内的虚拟概念,用来区分计算机内不同软件

资源定位:URL 统一资源定位器;URI 统一资源标识符

数据传输:TCP/IP协议,UDP协议;数据传输-数据封装与恢复

/**注:

 *同一个协议下端口号不能重复,不同协议端口号可以重复

 *1024以下的端口不使用(操作系统预留端口)

 *

 *TCP协议:类似打电话,面向连接,安全可靠,效率低下

 *UDP协议:类似发短信,非面连接,效率高,不安全

 *DNS:域名解析。将www.baidu.com/172.0.0.10这样的域名解析 

 */

2.InetAddress·:封装IP及DNS

        InetAddress addr = InetAddress.getLocalHost();//获得本地InetAddress对象
        System.out.println(addr.getHostAddress());//获得IP地址
        System.out.println(addr.getHostName());//获得域名
		
        //根据域名获得InetAddress对象
        addr = InetAddress.getByName("www.baidu.com");
        System.out.println(addr.getHostAddress());//返回IP地址
        System.out.println(addr.getHostName());//返回域名
		
        //根据ip地址获得InetAddress对象
        addr = InetAddress.getByName("111.13.100.91");
        System.out.println(addr.getHostAddress());//返回IP地址
        System.out.println(addr.getHostName());//为了安全性考虑,如果IP不存在或者DNS不解析,则返回自身

3.InetSocketAddress:封装端口

public static void main(String[] args) {
		InetSocketAddress addr = new InetSocketAddress("127.0.0.1", 9999);
		//InetSocketAddress addr = new InetSocketAddress("localhost", 9999);
		System.out.println(addr.getPort());//获得端口号
		System.out.println(addr.getHostName());//获得域名
		System.out.println(addr.getAddress());//获得IP地址
	}

4.URL的组成:协议    域名    端口(http默认为80)    资源文件名

eg;http://www.baidu.com:80/course(资源基本上都是相对路径)

public static void main(String[] args) throws MalformedURLException {
		// TODO 自动生成的方法存根
		
		URL url = new URL("http://study.163.com:80/course/courseLearn.htm?courseId=343001#/learn/video?lessonId=1051635894&courseId=343001");
		System.out.println("协议:" + url.getProtocol());
		System.out.println("域名:" + url.getHost());
		System.out.println("端口号:" + url.getPort());
		System.out.println("资源:" + url.getFile());
		System.out.println("相对路径:" + url.getPath());
		System.out.println("锚点:" + url.getRef());//锚点后的参数会被当做锚点的一部分
		System.out.println("参数:" + url.getQuery());
	}

猜你喜欢

转载自blog.csdn.net/fingers_xwk/article/details/80154895