java基础知识学习日记10

19、任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。

20、线程安全的类具有如下特征。该类的对象可以被多个线程安全的访问。每个线程调用该对象的任意方法之后都将得到正确的结果。每个线程调用该对象的任意方法之后,该对象状态依然保持合理状态。

21synchronized关键字可以修饰方法,可以修饰代码块,但不能修饰构造器和成员变量。

22、为了减少线程安全所带来的负面影响,程序可以采用如下策略:不要对线程安全类的所有方法都进行同步,只对那些会改变竞争资源的方法进行同步。如果可变类有两种运行环境,单线程环境和多线程环境,则i应该为该可变类提供两种版本,即线程不安全版本和线程安全版本。

23、线程会在如下几种情况下释放对同步监视器的锁定。当前线程的同步方发,同步代码块执行结束。当前线程在同步方发、同步代码块中遇到breakreturn终止了该代码块、该方法的继续执行。当前线程在同步代码块、同步方发中出现了未处理的Exception当前线程执行同步代码块或同步方法时,程序执行了同步监视器对象的wait()方法。

24、如下情况不会释放同步监视器。程序调用sleep()、yield()方法来暂停当前线程执行,不会释放。调用了线程的suspend()方法将线程挂起,不会释放。

25对于使用synchronized修饰的同步方法,因为该类的默认实例就是同步监视器,所以可以直接调用这三个方法。对于使用synchronized修饰的同步代码块,同步监视器是括号里的对象,所以必须使用该对象调用这三个方法。

26BlockingQueue具有一个特征:当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则该线程被阻塞,当消费者线程试图从BlockingQueue中取出元素时,如果该队列已空,则该线程被阻塞。27

27、用户创建的所有线程都属于指定线程组,如果程序没有显示指定线程属于哪个线程组,则该线程属于默认线程组。

28、后台线程组具有一个特征----当后台线程组的最后一个线程执行结束或最后一个线程被销毁后,后台线程组将自动销毁。

29ThreadLocal并不能替代同步机制,两者面向的问题领域不同,同步机制是为了同步多个线程对相同资源的并发访问,是多个线程之间进行通信的有效方式,而ThreadLocal是为了隔离多个线程的数据共享,从根本上避免了多个线程之间对共享资源的竞争,也就不需要对多个线程进行同步了。

 

学习内容:计算机网络基础,IP地址和端口,使用InetAddress包装IP地址,使用URLenCodeURLdeCode工具类,使用URLConnection访问远程资源,TCP协议基础,使用ServerSocketSocket,使用NIO实现非阻塞式网络通信,使用AIO实现异步网络通信,UDP协议基础,使用DatagramSocket发送接收数据报DatagramPacket,使用MulticastSocket实现多点广播,通过Proxy使用代理服务器,通过ProxySelector使用代理服务器

学习笔记:

1、计算机网络可以提供以下一些主要功能:资源共享。信息传输与集中处理。均衡负荷与分布处理。综合信息服务。

2、计算机网络通常是按照规模大小和延伸范围来分类的,常见的划分为:局域网,城域网,广域网,Internet可以视为世界上最大的广域网。

3、如果按照网络的拓扑结构来划分,可以分为星型网络、环形网络、树型网络、星型环形网络等,如果按照网络的传输介质来分,,可以分为双绞线网、同轴电缆网、光纤网和卫星网等。

4、通信协议通常由三部分组成,一是语义部分,用于决定双方对话的类型,二是语法部分,用于决定双方对话的格式,三是变幻规则,用于决定通信双方的应答关系。

5URL对象代表统一资源定位器,它是指向互联网资源的指针。

6TCP协议被称作一种端对端协议。这是因为它对两台计算机之间的连接起了重要作用----当一台计算机需要与另一台远程计算机连接时,TCP协议会让他们建立一个连接,用于发送和接收数据的虚拟链路。

7TCP协议使用重发机制--当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体的确认信息,如果没有收到另一个通信实体的确认信息,则会再次重发刚才发送的信息。

8、上面程序连接到远程主机ip地址是使用127.0.0.1,这个ip地址是一个特殊的地址,它总是代表本机的ip地址。

9、即使同一个Socket实例先后调用shutdownInput()、shutdownOutput()方法,该Socket实例依然没有被关闭,只是该Socket既不能输出数据,也不能读取数据而已。

10UDP协议是一种面向非连接的协议,面向非链接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此说UDP协议是一种不可靠的协议。UDP协议适用于一次只传送少量数据、对可靠性要求不高的应用环境。

11UDP协议和TCP协议简单对比如下。①TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。②UDP协议:不可靠,差错控制开销小,传输大小限制在64KB以下,不需要建立连接。

12getSocketAddress()方法的返回值是一个SocketAddress对象,该对象实际上就是一个ip地址和一个端口号,也就是说,它封装了一个InetAddress对象和端口的整数。

13、代理服务器主要提供如下两个功能:突破自身ip限制,对外隐藏自身ip地址,突破ip限制包括访问国外受限站点,访问国内特定单位、团体的内部资源。提高访问速度,代理服务器提供的缓冲功能可以避免每个用户都直接访问远程主机,从而提高客户端访问速度。

 

学习内容:类加载,类连接的过程,类初始化的过程,类加载器以及实现机制,集成ClassLoader实现自定义类加载器,使用URLClassLoader,使用Class对象,java8新增的方法参数反射,动态创建java对象,动态调用方法,访问并修改java对象的属性值,使用反射操作数组,使用Proxy创建动态代理,AOP入门,Class类的泛型,通过反射获取泛型类型

学习笔记:

1、当程序出现以下几种情况时,JVM进程将终止。程序运行到最后正常结束。程序运行到使用System.exit()或Runtime.getRuntime().exit()代码处结束程序。程序执行过程中遇到未捕获的异常或错误而结束。程序所在平台强制结束了JVM进程。

2、类加载指的是将类的class文件读入内存,并为之创建一个java.lang.class对象,也就是说,当程序中使用任何类时,系统都会为之建立一个class对象。

3、通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源。从本地文件系统加载class文件,这是前面绝大部分实例程序的类加载方式。JAR包加载class文件,这种方式也是很常见的。通过网络加载class把一个java源文件动态编译,并执行加载。

4、类连接可分为三个阶段。验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。准备:类准备阶段则负责为类的类变量分配内存,并设置默认初始值。解析:将类的二进制数据中的符号引用替换成直接引用。

5、当java程序首次通过下面的方式使用类或者接口时,系统就会初始化该类或者接口。创建类的实例。调用某个类的类方法。访问某个类或接口的类变量,或为该类变量赋值。使用反射方式来强制创建class对象。初始化某个类的子类。直接使用java.exe命令来运行某个主类。

6、当某个类变量使用了final修饰,而且他的值在编译时就确定下来,那么程序其他地方使用该变量时,实际上并没有使用该类变量,而是相当于使用常量。

7JVM的类加载机制主要有如下三种。全盘负责。父类委托。缓存机制。

8、使用自定义的类加载器,可以实现如下常见功能。执行代码前自动验证数字签名。根据用户提供的密码解密代码,从而可以实现代码混淆器来避免反编译class文件。根据用户需求来动态地加载类。根据应用需求把其他数据以字节码的形式加载到应用中。

9、程序需要在运行时发现对象和类的真实信息,有两种解决办法。第一种做法是用instanceof进行类型强制转换。使用反射。

10、在java中获得class对象有如下三种方式。使用class类的forName()静态方法。调用某个类的class属性来获取该类对应的class对象。调用对象的getClass()方法。

11、通过反射来生成对象有如下两种方式。使用class对象的newInstance()方法。先获得class对象想要的constructor,再调用构造器的newInstance()方法。

 

你可能感兴趣的:(java基础知识学习日记10)