最近从PHP转到了JAVA。 但是一直迷惑一个问题。就是JAVA 为什么会有连接池这个概念呢?
PHP的运行方式是从脚本开始到脚本结束,脚本结束,对象自动就没了。java是如何运行的呢?java难道是不同线程调用的还是同一个对象,那不就乱了??不同用户来,怎么区别谁是谁的对象?我都搞晕了。现在我都不敢new 对象了。
java运行方式,自始至终都是main方法为入口,启动一个JVM进程。
1、如果楼主只是运行一个简单java脚本,跟其他语言一样,都是main方法运行->结束,对象都销毁。
2、如果是运行一个web,那我用tomcat+servlet的方式来解释和php+cgi的不一样:
(1)对于一个web程序(用tomcat),java运行开始就是从tomcat启动的jvm,这个时候就是一个进程在运行,所有对象都在这个进程中。
(2)当一个http请求过来,tomcat有专门一个对象会去接收请求之后会创建一个线程去加载对应的servlet或者jsp页面(它类似php),然后去执行和响应。
区别就是这里,php通过webserver+cgi是去启动一个进程执行php脚本直到运行结束,那么这次请求是没有任何对象还或者了。
但是java,由于tomcat一直没有关闭,所以整个进程是一直存活着。你访问一个jsp,如果它有全局变量,那么即便jsp脚本执行完响应结束,全局变量还是会留在tomcat这个启动的这个jvm内存中。
“java难道是不同线程调用的还是同一个对象,那不就乱了?”
关于这个疑问。就像我上面提到的那个专门对象是一样的。由它接收到个请求,然后再给每个请求分配一个线程去处理。
在并发的情况下,这个对象完全可能被多个线程在同时使用。那为什么可以是同一个对象处理,就是线程安全这块了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。