一个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?

blue
我的理解是:在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连接数等。


如何解决资源限制的问题?

  1. 对于硬件限制,可以考虑使用集群并行地执行程序。例如使用Hadoop集群,不同的机器处理不同的数据。可以通过“数据ID%机器数”,计算得到一个机器编号,然后由对应编号的机器处理这笔数据。

  2. 对于软件限制,可以考虑使用资源池将资源复用。比如使用连接池将数据库和socket连接复用。





以上是关于一个JAVA编程的问题?的主要内容,如果未能解决你的问题,请参考以下文章

关于java编程的问题,有关Scanner

Java编程思想的作品鉴赏

java编程题 希望大家能够帮助我一下,谢谢?

我想用java编一个计算器,面向对象编程

面试中被问到你遇到的java编程中的bug你如何解决的

java 编程题集