多线程设计要点-JSP教程,面向对象/设计

1.多线程中有主内存和工作内存之分, 在JVM中,有一个主内存,专门负责所有线程共享数据;而每个线程都有他自己私有的工作内存, 主内存和工作内存分贝在JVM的stack区和heap区。
2.线程的状态有'Ready', 'Running', 'Sleeping', 'Blocked', 和 'Waiting'几个状态,
'Ready' 表示线程正在等待CPU分配允许运行的时间。
3.线程运行次序并不是按照我们创建他们时的顺序来运行的,CPU处理线程的顺序是不确定的,如果需要确定,那么必须手工介入,使用setPriority()方法设置优先级。
4.我们无从知道一个线程什么时候运行,两个或多个线程在访问同一个资源时,需要synchronized
5. 每个线程会注册自己,实际某处存在着对它的引用,因此,垃圾回收机制对它就“束手无策”了。
6. Daemon线程区别一般线程之处是:主程序一旦结束,Daemon线程就会结束。
7. 一个对象中的所有synchronized方法都共享一把锁,这把锁能够防止多个方法对通用内存同时进行的写操作。synchronized static方法可在一个类范围内被相互间锁定起来。
8. 对于访问某个关键共享资源的所有方法,都必须把它们设为synchronized,否则就不能正常工作。
9. 假设已知一个方法不会造成冲突,最明智的方法是不要使用synchronized,能提高些性能。
10. 如果一个"同步"方法修改了一个变量,而我们的方法要用到这个变量(可能是只读),最好将自己的这个方法也设为 synchronized。
11. synchronized不能继承, 父类的方法是synchronized,那么其子类重载方法中就不会继承“同步”。
12. 线程堵塞Blocked有几个原因造成:
(1)线程在等候一些IO操作
(2)线程试图调用另外一个对象的“同步”方法,但那个对象处于锁定状态,暂时无法使用。
13.原子型操作(atomic), 对原始型变量(primitive)的操作是原子型的atomic. 意味着这些操作是线程安全的, 但是大部分情况下,我们并不能正确使用,来看看 i = i + 1 , i是int型,属于原始型变量:
(1)从主内存中读取i值到本地内存.
(2)将值从本地内存装载到线程工作拷贝中.
(3)装载变量1.
(4)将i 加 1.
(5)将结果给变量i.
(6)将i保存到线程本地工作拷贝中.
(7)写回主内存.
注意原子型操作只限于第1步到第2步的读取以及第6到第7步的写, i的值还是可能被同时执行i=i+1的多线程中断打扰(在第4步)。

时间: 2024-10-06 02:29:45

多线程设计要点-JSP教程,面向对象/设计的相关文章

关于EJB的持久化对象技术分析-JSP教程,面向对象/设计

摘自久久学院表格型的关系型数据库与树型Java对象之间的映射问题是一个至今争论不休的问题,好在现在已经有了一些好的解决方案.在本文中,我们将介绍EJB技术是怎样用自已特定的方式来解决这个问题的. 只要是涉及到保存及查询信息 ,那绝大多数应用程序都需要与关系数据库打交道.但由于关系数据库与Java对象在结构上有着本质的区别,关于它们之间的映射关系对于那些Java开发者们来说,是一个很令人头痛的问题.关系型数据库是以表格方式存储数据的,而Java对象是以树型方式表现的.这种类型上的不匹配引发了各种各

EJB 最佳实践:改进远程对象设计-JSP教程,面向对象/设计

在这一新系列文章中,您将学习如何最佳设计和优化 Enterprise JavaBeans 组件.如何减少 RMI 通信和 JNDI 访问以及最有效地使用企业应用程序.在每篇技巧文章中,企业 Java 编程方面的主要权威人士 Brett McLaughlin 将提供最佳实践或设计模式.许多技巧文章将建立在前面的文章之上.建议您按顺序阅读这些技巧文章,因为它们将帮助您构建有助于您自己的企业应用程序编程的策略和设计方法.在本篇(也是第一篇)技巧文章中,Brett 演示了业务接口模式如何能够改进远程对象

Struts实践入门(原创)-JSP教程,面向对象/设计

//欢迎完整引用.转载,你可以通过http://www.dev-club.com与我联系.Struts实践入门作者:八脚鱼1.简介    Struts是apache Jakarta的一个开放元码的项目(    http://jakarta.apache.org/struts/index.html),为开发web应用程序提供了一个框架(framework).Sturts建议我们使用MVC Model 2 的模式开发web应用程序.Sturts提供了Controller层组件,这些组件可以和多种已有

Cloudera Impala架构设计要点

我们知道,在实时性要求不是很高的应用场景中,比如,月度统计报表生成等,我们基于传统的Hadoop MapReduce来处理海量大数据(包括使用Hive),在各方面表现都还不错,只需要离线处理数据,然后存储结果即可.但是如果在一些实时性要求相对较高的应用场景中,哪怕处理时间能够在原有的基础有大幅度地减少,也能很好地提升用户体验.对于大数据的实时性要求,其实是相对的,比如,传统使用MapReduce计算框架处理PB级别的查询分析请求,可能耗时30分钟甚至更多,但是如果能够使这个延迟大大降低,如3分钟

C#面向对象设计的七大原则_C#教程

本文我们要谈的七大原则,即:单一职责,里氏替换,迪米特法则,依赖倒转,接口隔离,合成/聚合原则,开放-封闭 . 1.   开闭原则(Open-Closed Principle, OCP) 定义:软件实体应当对扩展开放,对修改关闭.这句话说得有点专业,更通俗一点讲,也就是:软件系统中包含的各种组件,例如模块(Modules).类(Classes)以及功能(Functions)等等,应该在不修改现有代码的基础上,去扩展新功能.开闭原则中原有"开",是指对于组件功能的扩展是开放的,是允许对其

《面向对象设计实践指南:Ruby语言描述》目录—导读

内容提要 面向对象设计实践指南:Ruby语言描述 本书是对"如何编写更易维护.更易管理.更讨人喜爱且功能更为强大的Ruby应用程序"的全面指导.为帮助读者解决Ruby代码难以更改和不易扩展的问题,作者在书中运用了多种功能强大和实用的面向对象设计技术,并借助大量简单实用的Ruby示例对这些技术进行全面解释. 全书共9章,主要包含的内容有:如何使用面向对象编程技术编写更易于维护和扩展的Ruby代码,单个Ruby类所应包含的内容,避免将应该保持独立的对象交织在一起,在多个对象之间定义灵活的接

Flume(NG)架构设计要点及配置实践

Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Flume OG到现在的Flume NG,进行了架构重构,并且现在NG版本完全不兼容原来的OG版本.经过架构重构后,Flume NG更像是一个轻量的小工具,非常简单,容易适应各种方式日志收集,并支持failover和负载均衡. 架构设计要点 Flume的架构主要有一下几个核心概念: Event:一个数据单元,带有一个可选的消息头 Flow:Even

研究移动网站的导航的重新设计变化和设计要点

文章描述:导航之变-移动网站的导航设计. 导航是互联网网站最重要的组成部分之一,它涉及到产品的信息架构.页面布局和用户交互行为等诸多方面.一个网站用户体验的优劣往往和导航的优劣有密切的联系. 随着移动互联网的发展,越来越多的网站以移动网站的形式移植到手机上.在网站移植过程中,导航的重新设计有什么变化和设计要点呢,本文尝试做出一些研究. 导航的目的 在研究导航之前,我们不妨从导航的使用目的谈起.如果把网站比成一座大厦,那导航可认作是大厦内的指引系统.导航的使用目的归纳起来主要有以下几个方面: 1.

加快JDBC设计中JSP访问数据库

js|访问|设计|数据|数据库     以前,我们已经提到,JSP程序都是模块,并且具有强大的表达-请求(presentation-request)功能.建立一个完美的数据库访问是一个具有挑战的过程,而JDBC接口能够很好地完成这一过程.然而,嵌入于JSP代码中的JDBC代码,与SQL命令嵌入在JDBC一样,可以充分利用JSP的功能,为客户端建立一个整洁而简便的API.为了达到这一目的,我们可以考虑到使用JSP操作来建立数据库接口组件.      完美的JSP设计模式是Model-View-Co