1.以下对选择语句描述错误的是
答: 选择语句可以嵌套使用(switch case不能嵌套使用)
2.volatile关键字说法错误的是
答: 能保证线程安全(volatile关键字不能保证线程安全,它只是提供了一种弱的同步机制来保证修饰的变量的更新操作通知到其他线程)
3.下列哪段程序能够正确的显示GBK编码字节流到UTF-8编码字节流的改变
答: dst=new String(src,"GBK").getBytes("UTF-8")
4.关于下列代码,正确的两项是
public class NameList
{
private List names = new ArrayList();
public synchronized void add(String name)
{
names.add(name);
}
public synchronized void printAll() {
for (int i = 0; i < names.size(); i++)
{
System.out.print(names.get(i) + "");
}
}
public static void main(String[]args)
{
final NameList sl = new NameList();
for (int i = 0; i < 2; i++)
{
new Thread()
{
public void run()
{
sl.add("A");
sl.add("B");
sl.add("C");
sl.printAll();
}
} .start();
}
}
}
答: 代码输出“A B C A B C A B C”
代码输出“A B C A A B C A B C”
5.以下哪种JAVA的变量声明方式可以避免程序在多线程竞争情况下读到不正确的值
答: volatile
static volatile
拓展: synchronized可以修饰方法、代码块或对象,并不修饰变量
static修饰的变量属于类,线程在使用这个属性的时候是从类中拷贝一份到线程工作内存的,如果修改线程内存中的值之后再写回到原先的位置,就会有线程安全问题,用static修饰的变量可见性是无法确保的