⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复习6.txt

📁 Java大部分的基础知识,EJB3,EJB2,WEBSERVICE,SOAP,JMS,MQ,还有些面试题
💻 TXT
字号:
java.net
	通讯所用的协议:
	1、tcp/ip:有会话,有交互,一般是点对点的通信,稳定,保证质量,
		  但速度慢,所耗资源大。
		  tcp/ip--->ftp
		  	--->http-->soap
		  	--->smtp
		  一、实现
		  	服务端
		  		--实例化说明公开的端口
		  			ServerSocket ss=new ServerSocket(4001);
		  		--监听,当接收到一个请求后,产生个会话
		  			Socket socket=ss.accept();
		  		--得到输入的信息
		  			socket.getInputStream();
		  		--向服务端打印信息
		  			socket.getOutputStream();
		  	客户端:
		  		Socket client=new Socket(服务器主机名/ip,端口);
		  		//得到输入流
		  		client.getInputStream();
		  		//得到输出流
		  		client.getOutputSteam();		  	
		  	--客户端通过键盘输入信息发给服务端,服务接收信息
		  	  将结果返回给客户端,客户端接收信息打印。		  	  
	2、udp:没有会话,没有交互,不管另一方是否准备好都进行,是广播式,
		可以群发,不稳定、不能保证质量,但速度快,所耗资源小。
		核心类:
			DatagramSocket:发送信息
				send(DatagramPackage dp):发送信息
				receive(DatagramPackage dp):接收信息
			DatagramPackage:封装信息
				1、发送信息要说明对方的ip及端口
					DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 
				3、接收时要预留空间。
					DatagramPacket(byte[] buf, int offset, int length)
线程
	一、线程与进程的比较
	1、共同点
		并发
	2、不同点
		进程:
			有独立的内存空间
			进程间的通信需要的资源大
		线程:
			进程内的并发,进程内的并发是由线程决定的。
			线程没有独的内存空间而是共享进程的内存
			线程间的通信占用资源较小。			
	二、线程的实现(*****):继承Thread或实现Runnable接口,覆盖run方法,
			必须通过start()启动,
			调用run方法运行线程。
			如果不是start()就不会启动新线程,
			而是调用一个对象的方法,没有新线程,
			没有并发。
		public class MyThread extends Thread
		{
			public void run()
			{
			
			}
			public static void main(String[] args)
			{
				MyThread my=new MyThread();
				my.start();
			}
		}
		
		public class MyThread implements Runnable
		{
			public void run()
			{
			
			}
			public static void main(String[] args)
			{
				MyThread my=new MyThread();
				Thread t=new Thread(my);
				t.start();
			}
		}
	三、线程同步(*****):一个对象的同步方法被一个线程调用,
		     另一个线程调用该对象的当前方法
		     或其它同步方法时,只能等待,
		     调用非同步方法不受限。
		注意事项:
			1、只有一个对象
			2、有多个线程
		代码:
			类级的实现
			public class CommObject
			{
				//同步方法
				public synchronized void  a1()
				{
					
				}
				//非同步方法
				public void a1()
				{
				
				}
			}
			对象级的实现,类中的方法没有加synchronized关键,而是通过同步块说明同步。
			public class CommObject
			{
				//非同步方法
				public void  a1()
				{
					
				}
				//非同步方法
				public void a2()
				{
				
				}
				public static  void main(String[] args)
				{
					CommObject com=new CommObject();
					//对象同步方法
					synchronized(com)
					{
						com.a1();
						com.a2();
					}
				
				}
			}	
	四、实现多线程服务框架(****):两个线程一个类。
		1、监听器线程:监听客户的连接请求产生一个会话。
		public class Listener extends Thread
		{
			private ServervSocket ss;
			private Socket socket;
			public void run()
			{
				ss=new ServerSocket(4001);
				while(true)
				{
					socket=ss.accept();
					Connection con=new Connection(socket.getInputStream(),socket.getOutputStream());
					//运行会话线程,会话线程与监听线程并发运行,会话线程结束后
					//监听线程继续执行
					con.start();
				}
			}
		}
		2、会话线程:
			其由监听器产生,并脱离监听器线程独立运行,调用会话线程。
			如果监听器线程停止了,不影响会话线程。	
			public class Connection extends Thread
			{
				private InputStream input;
				private OutputStream output;
				private Server server;			
				public Connection(InputStream input,OutputStream output)
				{
					this.input=input;
					this.output=output;
					server=new Reverse();	
				
				}
				public void run()
				{			 
				    this.server.server(this.input,this.output);
				}
			}
		3、服务类:由会话线程调用,做具体的服务
			public interface Server
			{
				public void server(InputStream input,OutputStream output);
			}
			public class Reverse implements Servler
			{
				public void server(InputStream input,OutputStream output)
				{
					BufferedReader br=new BufferedReader(new InputStreamReader(intput));
					PrintStream ps=new PrintStream(output);
					while(true)
					{
						ps.println("请输入信息");
						br.readLine();
					}
				}
			}		
	
	七、线程的生命周期(*****)
		就绪:实例化一个结程
		启动:通过start方法启动线程,与主线程并发运行
		运行:调用run方法
		休眠:sleep()
		等待:wait()
		激活:notify()
		yield:将当前线程放到要执行线程队列最后。			
		挂起:suspend()
		恢复:resume()
		销毁:
			stop:有垃圾的清理工作
			destroy:没有垃圾清理工作
	八、sleep与wait的区别
		sleep:
			可以在同步中执行,也可不在同步块中执行。
			确定休眠多长时间,自动醒来。
		wait:
			必须在同步块中执行
			什么时间醒来不清楚,只有通过外部类调用notify方法之后才可以醒来的。
	九、join(****):主线程等待所有的子线程执行结束后再结束
		线程实例.join();
	十、daemon(****):守护线程,JVM就是一个守护线程
		在方法调用之前设置
		为非守护线程提供服务,当所有非守护线程结束后,
		不管其是否运行完毕都会自动结束。
		由一个守护线程产生的新线程也是守护线程
	十一、ThreadGroup(***):线程组,管理多个线程
		任何一个线程都在一个线程组中,
		线程组下可以有子线程组及线程。
		getParentGroup:得到父线程组
		currentThread:得到当前线程
		getThreadGroup:得到当前线程所在的线程组
		new Thread(所属线程组,Runnable,name)
		new Thread(Runnable)
		new ThreadGroup(线程组,线程组名)	
		遍历线程组下的所有线程
	十二、 setPriority(***):(1--10)一般情况下优先级高的先执行。
		默认是5
		最大是10
	二、线程池(***):系统启动每一个线程要占用较多时间,
		所以我们可以用线程池,在池中预放n个线程,
		用时取出,不用时可以还回去。
	三、基于线程的时间管理(**)
		TimerTask:过一段时间可以启动的线程,必须继承于该线程
		Timer:
			Timer timer=new Timer();
			timer的schedule方法:
				1、过多长时间执行线程。
					Timer(myTask2, 300)
				2、过多长时间执行线程,每500秒重新执行一次
					Timer(myTask2, 300, 500)
				3、Timer(myTask3, date):什么时间后执行一次线程
			cancel方法:终止定时器:
				Timer.cancel();		
	四、线程实现死锁(*****)
		一个线程占用一个资源再去占用另一个线程正在使用的资源。
集合
	作用:是可以存储一批类型不同的对象,针对集合的实现类有很多,作用都是一样的
		 即存储、传输数据,但存储的数据结构不一样,其速度、安全性也不一样。
	集合框架的组成:
		接口
			Collection:直接存储
				Set	List
			Map:键名+键值
		实现:
			ArrayList
			Vector
			HashSet
			Hashtable
		算法:实现了很多静态方法,可以对集合进行操作
			Collections
	Collection体系:
			Colllection
		List(值可以重复)			Set(值不可以重复)
	ArrayList   Vector	LinkedList	HashSet			TreeSet
	List的通用方法
		add
		remove
		set
		indexOf
		addAll(Collection c)
		removeAll(Collection c)
		clone();//复制
		size();//实际元素个数
		capacity();//最大容量
		有三种遍历方式
			Iterator(迭代器)
			Enumeration(序列)
			for(循环)
	ArrayList Vector LinkedList的区别
		ArrayList Vector:以线性表的方式存储,查、改快,增删慢
			Vector:是线程安全,方法是同步方法
			ArrayList:是线程不安全,方法是非同步方法
		LinkedList:单链表,查、改慢,增删快
		
	Set:不可以有重复值
			一、两个对象的比较
			对于自定义的类,必须覆盖equals方法。该类型的两个对象比较,
			只有覆盖了equals方法,才能确定这两个对象是否相同,
			否则不管相同还是不相同返回都是false。
		二、向set集合对象中加入新对象,插入对象的hasCode值与集合中每一个对象的hashCode值比较,
			若有一个相等,返回false.
		    若都不相同,插入对象与集合中每一个对象比较,若有一个相等,返回false不插入,
		    若都不相同,将插入对象加入到集合中。
		三、在开发中,对于自定义实体必须覆盖toString、hashCode、equals方法
	Set只可以有两种遍历方式
		iterator
		enumeration
	HashSet:值不可以重复
	TreeSet:值也不可以重复,会自动排序,即然可以排序,集合中对象类型必须相同
	
	Map:是键名+键值,键名不可以重复,键值可以重复,通过键名取键值
		HashMap:线程不安全
		Hasttable:线程安全
		
		jsp中的作用域对象(session、request、application、page)属于map这个体系
	Collection及Collections的区别
		Collection是集合的根接口
		Collections是算法,提供了静态方法,可以对集合进行操作

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -