关于线程的几个问题

  嘻嘻,刚刚开通CSDN的博客,前三天又不能发表文章,今天终于等到第四天啦!前两天,师兄让我思考几个关于线程的问题,今天就拿出来分享一下,就当是我们共同探讨啦~~~~~~

  

1.线程是什么?

  线程是由进程而来的,进程就是一个正在执行的程序,是动态的(程序是含有指令和数据的文件,是静态的)。线程就是进程中某个单一顺序的执行路线,是比进程更小的执行单位。同一个进程中所有线程 都在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源,比如共享一个对象或者文件。

  对于一个软件来说,有可能是多线程的,也有可能是多进程。比如,word就是一个多线程的软件,同时打开几个word文档时,任务管理器中只有一个word.exe进程。一旦一个文档崩溃,其他文档也会崩溃。多线程是为了解决线程间的资源共享,并且,线程间切换、通信更方面高效。而sogo浏览器就是一个多进程的软件,每打开一个页面,任务管理器里就会窗器一个sogoExplorer.exe进程。

2.一个软件,启动起来……线程是怎样的

桌面软件?

  虚拟机创建一个java.exe进程,软件程序在这个进程上运行。

web软件?

 通过浏览器访问tomcat,tomcat配置的虚拟机创建一个javaw.exe进程,软件程序在这个进程上运行。

    Java.exe有控制台,可以进行输入指令、编译、显示等;javaw.exe没有控制台,只可以输出,执行效率更高。


3.
一个Java软件,线程是指Java类本身还是虚拟机?

  虚拟机,虚拟机会为这个java软件创建一个java.exe/javaw.exe进程,软件程序在这个进程中运行。而java类只是.class文件
4.
当有人使用该软件的时候……线程是怎样的

线程状态和周期:

1.新建(newborn) 2.就绪(runnalbe) 3.运行(running) 4.阻塞(blocked)5.死亡(dead)

  软件在启动时,虚拟机会创建一个java.exe(桌面)/javaw.exe(web)进程来运行这个软件,该进程通过主线程入口的main方法运行(逐层调用)软件中的各个线程(前台线程)。对于桌面软件,通过start()方法启动线程,一般情况下线程会自动调用run()方法,运行线程;对于web软件,是由服务器(tomcat/weblogic)负责线程的调度,tomcat内配置的是官方虚拟机,weblogic配置的自己开发的虚拟机,性能更好。当cpu资源短缺是会进入阻塞状态。前台线程运行完毕后,由后台线程(比如虚拟机的垃圾回收线程)结束其生命周期。

5.软件从界面请求到查询数据库到返回结果,整一条龙的程序逻辑,都是一个线程的吗?还是说不通的层,会有不同的线程?

  都是一个线程

      说到这个问题,我想到了hibernatesession机制。Hibernatesession和线程是绑定在一起的。session中存放数据库连接(Treadlocal机制),并且设定了最少连接数,最大连接数等数据,同时,session有缓存机制,会将数据暂时保存。。用户通过getSession()调用conectionresponse动作后释放连接,将conection放回session中供其他用户调用。当session中的连接不足时,Factory会自动创建连接,直到最大连接数,达到最大连接时,就只能等待其他用户释放连接。这样,同一个用户在不同的线程中可能会取到不同的session,那么就会导致数据错误。要改进这种情况,我们可以借助websession来进行过滤。这样就会麻烦很多。不过,将spring框架整合进来后我们就不用担心这个问题,spring可以帮我们解决。

 

 关于线程,今天就说这么多吧!其他问题,在慢慢来咯~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值