19、任何时刻只能有一个线程可以获得对同步监视器的锁定,当同步代码块执行完成后,该线程会释放对该同步监视器的锁定。
20、线程安全的类具有如下特征。①该类的对象可以被多个线程安全的访问。②每个线程调用该对象的任意方法之后都将得到正确的结果。③每个线程调用该对象的任意方法之后,该对象状态依然保持合理状态。
21、synchronized关键字可以修饰方法,可以修饰代码块,但不能修饰构造器和成员变量。
22、为了减少线程安全所带来的负面影响,程序可以采用如下策略:①不要对线程安全类的所有方法都进行同步,只对那些会改变竞争资源的方法进行同步。②如果可变类有两种运行环境,单线程环境和多线程环境,则i应该为该可变类提供两种版本,即线程不安全版本和线程安全版本。
23、线程会在如下几种情况下释放对同步监视器的锁定。①当前线程的同步方发,同步代码块执行结束。②当前线程在同步方发、同步代码块中遇到break、return终止了该代码块、该方法的继续执行。③当前线程在同步代码块、同步方发中出现了未处理的Exception。④当前线程执行同步代码块或同步方法时,程序执行了同步监视器对象的wait()方法。
24、如下情况不会释放同步监视器。①程序调用sleep()、yield()方法来暂停当前线程执行,不会释放。②调用了线程的suspend()方法将线程挂起,不会释放。
25、①对于使用synchronized修饰的同步方法,因为该类的默认实例就是同步监视器,所以可以直接调用这三个方法。②对于使用synchronized修饰的同步代码块,同步监视器是括号里的对象,所以必须使用该对象调用这三个方法。
26、BlockingQueue具有一个特征:当生产者线程试图向BlockingQueue中放入元素时,如果该队列已满,则该线程被阻塞,当消费者线程试图从BlockingQueue中取出元素时,如果该队列已空,则该线程被阻塞。27
27、用户创建的所有线程都属于指定线程组,如果程序没有显示指定线程属于哪个线程组,则该线程属于默认线程组。
28、后台线程组具有一个特征----当后台线程组的最后一个线程执行结束或最后一个线程被销毁后,后台线程组将自动销毁。
29、ThreadLocal并不能替代同步机制,两者面向的问题领域不同,同步机制是为了同步多个线程对相同资源的并发访问,是多个线程之间进行通信的有效方式,而ThreadLocal是为了隔离多个线程的数据共享,从根本上避免了多个线程之间对共享资源的竞争,也就不需要对多个线程进行同步了。
学习内容:计算机网络基础,IP地址和端口,使用InetAddress包装IP地址,使用URLenCode和URLdeCode工具类,使用URLConnection访问远程资源,TCP协议基础,使用ServerSocket和Socket,使用NIO实现非阻塞式网络通信,使用AIO实现异步网络通信,UDP协议基础,使用DatagramSocket发送接收数据报DatagramPacket,使用MulticastSocket实现多点广播,通过Proxy使用代理服务器,通过ProxySelector使用代理服务器
学习笔记:
1、计算机网络可以提供以下一些主要功能:①资源共享。②信息传输与集中处理。③均衡负荷与分布处理。④综合信息服务。
2、计算机网络通常是按照规模大小和延伸范围来分类的,常见的划分为:局域网,城域网,广域网,Internet可以视为世界上最大的广域网。
3、如果按照网络的拓扑结构来划分,可以分为星型网络、环形网络、树型网络、星型环形网络等,如果按照网络的传输介质来分,,可以分为双绞线网、同轴电缆网、光纤网和卫星网等。
4、通信协议通常由三部分组成,一是语义部分,用于决定双方对话的类型,二是语法部分,用于决定双方对话的格式,三是变幻规则,用于决定通信双方的应答关系。
5、URL对象代表统一资源定位器,它是指向互联网”资源“的指针。
6、TCP协议被称作一种端对端协议。这是因为它对两台计算机之间的连接起了重要作用----当一台计算机需要与另一台远程计算机连接时,TCP协议会让他们建立一个连接,用于发送和接收数据的虚拟链路。
7、TCP协议使用重发机制--当一个通信实体发送一个消息给另一个通信实体后,需要收到另一个通信实体的确认信息,如果没有收到另一个通信实体的确认信息,则会再次重发刚才发送的信息。
8、上面程序连接到”远程主机“的ip地址是使用127.0.0.1,这个ip地址是一个特殊的地址,它总是代表本机的ip地址。
9、即使同一个Socket实例先后调用shutdownInput()、shutdownOutput()方法,该Socket实例依然没有被关闭,只是该Socket既不能输出数据,也不能读取数据而已。
10、UDP协议是一种面向非连接的协议,面向非链接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。至于对方是否可以接收到这些数据内容,UDP协议无法控制,因此说UDP协议是一种不可靠的协议。UDP协议适用于一次只传送少量数据、对可靠性要求不高的应用环境。
11、UDP协议和TCP协议简单对比如下。①TCP协议:可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。②UDP协议:不可靠,差错控制开销小,传输大小限制在64KB以下,不需要建立连接。
12、getSocketAddress()方法的返回值是一个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修饰,而且他的值在编译时就确定下来,那么程序其他地方使用该变量时,实际上并没有使用该类变量,而是相当于使用常量。
7、JVM的类加载机制主要有如下三种。①全盘负责。②父类委托。③缓存机制。
8、使用自定义的类加载器,可以实现如下常见功能。①执行代码前自动验证数字签名。②根据用户提供的密码解密代码,从而可以实现代码混淆器来避免反编译class文件。③根据用户需求来动态地加载类。④根据应用需求把其他数据以字节码的形式加载到应用中。
9、程序需要在运行时发现对象和类的真实信息,有两种解决办法。①第一种做法是用instanceof进行类型强制转换。②使用反射。
10、在java中获得class对象有如下三种方式。①使用class类的forName()静态方法。②调用某个类的class属性来获取该类对应的class对象。③调用对象的getClass()方法。
11、通过反射来生成对象有如下两种方式。①使用class对象的newInstance()方法。②先获得class对象想要的constructor,再调用构造器的newInstance()方法。