佛山网站建设3lue3lue,橙色在网站中的应用,网站上线步骤 icp备案,怎么做后台网站一键更新#xff08;1#xff09;栈 栈帧对应一次方法的调用#xff0c;线程是要执行代码的#xff0c;这些代码都是由一个个方法组成#xff0c;线程运行的时候每个方法需要的内存叫做一个栈帧
#xff08;2#xff09;栈的演示 Frames#xff1a;相当有栈 方法相当于栈帧…1栈 栈帧对应一次方法的调用线程是要执行代码的这些代码都是由一个个方法组成线程运行的时候每个方法需要的内存叫做一个栈帧
2栈的演示 Frames相当有栈 方法相当于栈帧Variables方法的参数
活动栈帧在我们栈的顶部正在执行的栈帧叫做活动栈帧 method2栈帧执行完释放掉出栈 method1执行完出栈 主方法再执行执行结束
3 栈的问题辨析 1.栈帧内存在每一次方法结束后都会弹出栈会自动的被回收掉不需要垃圾回收管理栈内存
2.栈划分的越大反而会使线程数变少划分大了只是能够进行更多次的方法递归调用并不是划分越大越好增强运行的效率
3.需要看多个线程对这个变量时共享的或者这个变量对你每个线程是私有的 比如说多个线程调用这个方法会不会造成 x值的混乱呢不会的因为x变量是方法内的局部变量一个线程对应一个栈线程内每一次方法的调用都会产生一个新的栈帧 他们是互不干扰的 如果变量时static的如果不加线程安全 保护的话就会产生线程安全问题
如果是共享的需要考虑线程安全问题你是每个线程私有的就不用考虑线程安全问题 4栈问题辨析-线程安全 m1方法不会产生线程安全问题因为sb是线程内的一个局部变量是属于每个线程私有的是线程安全的
m2不是线程安全的因为作为方法的参数意味着可能有其他的线程可能访问到它他就不是线程私有的啦对多个线程是一个共享的
m3:也不是线程安全的因为他把结果对象返回啦其他线程可能拿到这个参数进行修改 main方法中把它作为参数进行修改其他线程也进行修改它就是线程共享的啦多个线程共享一个对象需要使用StringBuffer