Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-10-19~2019-10-26 周分享总结 #2

Open
hansyyy opened this issue Nov 6, 2019 · 0 comments
Open

2019-10-19~2019-10-26 周分享总结 #2

hansyyy opened this issue Nov 6, 2019 · 0 comments
Labels
daily share Daily Share Summary documentation Improvements or additions to documentation question Further information is requested

Comments

@hansyyy
Copy link

hansyyy commented Nov 6, 2019

2019-10-19~2019-10-26 周分享总结

1、分享人:邓思远 | 分享日期:2019-10-19

提问:下面调用sout(SubClass.value);输出的是什么? 为什么?

public class SuperClass{

	static {
		System.out.println("SuperClass init!");
	}
	public static int value = 123;
	
}

public class SubClass extends SuperClass {

	static {
		System.out.println("SubClass init!");
	}
}

回答:

SuperClass init!
123

详情请参考链接

2、分享人:袁乙文 | 分享日期:2019-10-20

提问:StringBuffer、StringBuilder、String哪个是final类型的?

回答:都是final类,都不允许被继承;String类长度是不可变的,StringBuffer和StringBuilder类长度是可以改变的;

详情请参考链接

3、分享人:孙鹏翔 | 分享日期:2019-10-21

提问:final, finally, finalize的区别是什么?

回答:final用于声明属性,方法和类,表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。finally是异常处理语句结构的一部分,表示总是执行。finalize是Object类中的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,如关闭文件等。但是jvm不能保证此方法总被调用。

详情请参考链接

4、分享人:王增益 | 分享日期:2019-10-22

提问:可变参数是什么?

回答:可变参数关于对相同类型,但是若干个不确定蛋参数(数组都可以传)的方法。(参数类型... 参数名),函数里面可以通过foreach调用或者x.length调用。

5、分享人:姚秋鸿 | 分享日期:2019-10-23

提问:这代码序运行时有无问题?

Map<String,Boolean> map = new HashMap<String, Boolean>();
Boolean b = (map!=null ? map.get("test") : false);

回答:

详情请参考链接

6、分享人:袁乙文 | 分享日期:2019-10-24

提问:这代码序运行时有无问题?

public class Test implements Runnable {

	private int b = 1;
	
	@Override
	public void run() {
		System.out.println("A is begin");
		while(true) {
			if(b==2) {
				breeak;
			}
		}
		System.out.println("A is finish");
	}
	
	public static void main(String[] args) {
		Test a = new Test();
		new Thread(a,"A").start();
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		a.b = 2;
	}
}

回答:此问题和并发编程的可见性有关,主线程虽然修改了a.b=2,但是这个值对于子线程并不是可见的。因为他的修改只改了自己的本地内存和主内存,但是并没有强制子线程更新这个值。所以子线程的判断结果一直都是false。

A is begin

7、分享人:杨兴旺 | 分享日期:2019-10-25

提问:1.volatile能使得一个非原子操作变成原子操作吗? 2.volatile是否完全具有原子性 图中的输出结果每次是否一样?

public class VolatileDemo {
    private long value;
    public  void incre(){
        value++;
        System.out.println(value);
    }

    public static void main(String[] args){
        final VolatileDemo volatileDemo = new VolatileDemo();
        for (int i = 0; i< 10; i++){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    volatileDemo.incre();
                }
            }).start();
        }
    }
}

回答:不能。volatile不具有原子性,每次输出不一样。

8、分享人:宋丽 | 分享日期:2019-10-26

提问:当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

回答:要看这个方法是否为静态方法。非静态方法之间锁的是本类对象,其他方法就无法进行。如果是静态方法,进程拿到的锁和非静态的不是一个,所以静态方法间必须同步。另一个线程可以同时访问这个对象的非同步方法(非静态),但是不能同时访问同步方法。这里的同步方法指该静态方法本身和其他同步方法(静态)。

@GeniusDSY GeniusDSY added daily share Daily Share Summary documentation Improvements or additions to documentation question Further information is requested labels Nov 6, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
daily share Daily Share Summary documentation Improvements or additions to documentation question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants