您现在的位置:首页 > 教案格式 > 正文

java 数组转字符串????回答主要是三个方面:(1)ha(6)

2018-01-23 01:02 网络整理 教案网

这里写图片描述

Java内存模型的两条规定

(1)线程对共享变量的所有操作都必须在自己的工作内存中进行,不能直接从主内存中读写;

(2)不同线程无法直接访问其他线程工作内存中的变量,线程间变量值的访问都需要通过主内存来完成。

常常需要在隔两分钟后再收集一次thread dump,如果得到的输出相同,仍然是大量thread都在等待给同一个地址上的锁,那么肯定是死锁了。

3.1.2 各种锁

1、悲观锁

无论共享数据是否产生争用、是否由于争用产生冲突,都会加锁。

2、乐观锁

假设没有共享数据争用,就执行成功。若监测出有共享数据争用产生冲突,就进行补救措施(如:重试)。

3、可重入锁

一个线程加锁了,该线程中调用其他的方法,也同样加锁了,如递归;

4、读写锁

对一个资源的访问,可以分成读锁和写锁;

5、可中断锁

一个线程等待的时间太长,可以中断等待的过程,去执行其他的事情;

6、公平锁

尽量以锁的顺序来获取锁;

7、优化方面的锁

1)自旋锁(自适应锁)

共享数据锁定状态比较短,对于阻塞的线程不要立马挂起,而是自旋一下就可得到,避免线程切换的开销。

2)锁消除

有些数据是不会被其他线程访问到的,这时候就不需要加同步措施,进行锁消除。

3)锁粗化

同步块的作用域一般越小越好,但是对一个对象的连续操作,不停的加锁解锁,这样会出现很大的性能问题。

4)轻量级锁

为了减少获得锁和释放锁所带来的性能消耗。Java 1.6有无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态四个状态。随着竞争,不断升级,不能降级。java 数组转字符串

5)偏向锁

java将字符串转为数组_java string转字符串_java 数组转字符串

目的是消除数据在无竞争情况下的同步原语。进一步提升程序的运行性能。 偏向锁就是偏心的锁,意思是这个锁会偏向第一个获得他的线程。

Throwable是java语言中所有错误和异常的基类,它由两个子类:Error, Exception.

异常种类

Error: Error为错误,是程序无法处理的,如OutOfMemoryError,ThreadDeath等,出现这种情况你唯一能做的就是听之任之,交由JVM来处理,不过大多数情况下会选择终止线程。

Exception: Exception是程序可以处理的异常,它又分为两种CheckedException(受检异常),一种是unCheckedException(不受检异常)

CheckedException发生在编译阶段,必须要使用try……catch(或则throws)否则编译不通过

unCheckedException发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的,难以排查,我们一般都需要纵观全局才能够发现这类的异常错误。

常见异常的基类:

IOException

RuntimeException

这里写图片描述

5、 加载问题

Static:

1)修饰变量:静态变量随着类加载时被完全初始化,内存中只有一个,且JVM也只会为它分配一次内存,所有类共享静态变量。

2)修饰方法:在类加载的时候就在,不依赖任何实例;static方法必须实现,不能用abstract修饰。

3)修饰代码块:在类加载完成后就会执行代码块中的内容

4)执行的顺序:父类静态代码块—>子类静态代码块—->父类非静态代码块—->父类构造方法—–>子类非静态代码块—–>子类构造方法

Final:

1)修饰变量:编译期常量(类加载的过程完成初始化,编译后带入到任何计算式中,只能是基本类型) 运行时常量(基本数据类型或引用数据类型,引用不可变,但引用的对象内容可变)

2)修饰方法:不能被继承,不能被子类修改