一个JAVA编程的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个JAVA编程的问题?相关的知识,希望对你有一定的参考价值。
Given:
public class Test
public static void main(String[]args)
string foo="blue";
string bar=foo;
foo="green"
System.out.printIn(bar);
what is the result?
我的理解是:在JAVA中,String 对象的值不可以改变,string foo="blue"在堆栈区建立一个字符串“blue”对象,并且foo指向这个对象的;string bar=foo,使bar也指向blue这个对象;foo="green"在堆栈区建立一个新的“green”对象,并让foo指向它,而bar没有变化,仍然指向"blue".
共同学习ing 参考技术A there should be some errors.
bar points to the "blue";
foo points to the "green" 参考技术B 经典275 考题啊,
blue 参考技术C 噢,又是图书馆,难道是要做图书馆管理系统··· 参考技术D 你所说的归还日期有要求么
Java并发编程的挑战
并发编程的目的是为了让程序运行得更快,但是,并不是线程启动的越多,就能让程序最大限度地并发执行。并发编程时,会面临非常多的挑战,比如上下文切换的问题,死锁的问题,以及受限于各种硬件和软件的资源限制问题。
CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载到这个任务的状态。从任务保存到再加载的过程就是一次上下文切换。
vmstat 1#vmstat可以测试上下文切换的次数。输出结果里的CS(Content Switch)即表示上下文切换的次数。
减少上下文切换的方法有:无锁并发编程,CAS算法,使用最少线程,使用协程。
使用最少线程:避免创建不需要的线程,比如任务很少,却创建了很多线程来处理,造成大量线程都处于等待状态(WAITING)。
协程:在单线程里实现多任务的调度,并在单线程里维持多个任务间的切换。
硬件资源限制有带宽的上传/下载速度、硬盘读写速度和CPU的处理速度。软件资源限制有数据库的连接数和socket连接数等。
如何解决资源限制的问题?
对于硬件限制,可以考虑使用集群并行地执行程序。例如使用Hadoop集群,不同的机器处理不同的数据。可以通过“数据ID%机器数”,计算得到一个机器编号,然后由对应编号的机器处理这笔数据。
对于软件限制,可以考虑使用资源池将资源复用。比如使用连接池将数据库和socket连接复用。
以上是关于一个JAVA编程的问题?的主要内容,如果未能解决你的问题,请参考以下文章