`
羽鹤彬
  • 浏览: 48210 次
社区版块
存档分类
最新评论
文章列表
    满足同步需求的另一种方法是使用不可变对象。许多时候出现并发问题都是与多线程试图同时访问同一个可变的状态相关。如果对象的状态不会改变,那么这些问题与复杂性也就自然消失了。     如果某个对象在被创建后 ...
    当访问共享的可变数据的时候,通常需要使用同步。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步。这种技术被称为线程封闭,他是实现线程安全的最简单的方式之一。当某个对象封闭在一个线程中时,这种用法将自动实现线程安全性,即使被封装的对象本身不是线程安全的。     线程封闭技术的一种常见的应用是JDBC的Connection对象。JDBC规范并不要求Connection对象必须是线程安全的。在典型的服务器应用程序中,线程从连接池中获得一个Connection对象,并且用该对象来处理请求,使用完后再将对象返还给连接池。     维持线程封闭性的一种更规范的方法是使用 ...
    “发布”一个对象的意思是指,使对象能够在当前作用域之外的代码中使用。当某个不应该发布的对象被发布时,这种情况就背称为“逸出”。发布对象的最简单的方法是将对象的引用保存到一个公有的静态变量中,以便任何类和线程都能看见该对象。例如: public static <Secret> knownSecrets; public void initialize(){ knownSecrets = new HashSet<Secret>(); }     当发布某个对象时,可能会间接地发布其他对象,在该对象的非私有域中引用的所有对象同样会被发布。 p ...
public class NoVisibility { private static boolean ready; private static int number; private static class ReaderThread extends Thread{ public void run(){ while(!ready){ Thread.yield(); System.out.println(number); } }//end run() }//end Class ReaderThread pub ...
    要编写线程安全的代码,其核心就在于要对状态访问操作进行管理,特别是对共享的和可变的状态的访问。“共享”意味着变量可以由多个线程同时访问,而“可变”则意味着变量的值在生命周期内可以发生变化。     当多个线程访问某个状态变量并且其中有一个线程执行写入操作的时候,必须采用协同机制来系统这些线程对变量的访问。当多个线程访问某个类的时候,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。其中无状态的类(它既不包含任何域,也不包含任何对其他类中域的引用,计算过程中的临时状态仅存在于线程栈上的局部变量中,并且只能由正在执行的线程访问)在被多线程执行的过程中,互相之间不会影响,就好像都在访 ...
一、mysql日期和字符相互转换方法 date_format(date,'%Y-%m-%d')    -------------->oracle中的to_char(); str_to_date(date,'%Y-%m-%d')     -------------->oracle中的to_date(); %Y:代表4位的年份 %y:代表2为的年份 %m:代表月, 格式为(01……12)  %c:代表月, 格式为(1……12) %d:代表月份中的天数,格式为(00……31)  %e:代表月份中的天数, 格式为(0……31) %H:代表小时,格式为(00……23)  ...
去除指定空格<A >   </A>  转换成<A ></A> 引用private String replaceBlank(String str) {         String dest = "";         if (str!=null) {         Pattern p = Pattern.compile("\\r+|\\t+|\\s+(?![^<>]*>)");             Matcher m = p.matcher(str);           ...
第一篇: 使用synchronized 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。我们首先编写一个非常简单的多线程的程序,是模拟银行中的多个线程同时对同一个储蓄账户进行存款、取款操作的。 在程序中我们使用了一个简化版本的Account类,代表了一个银行账户的信息。在主程序中我们首先生成了1000个线程,然后启动它们,每一个线程都对John的账户进行存100元,然后马上又取出100元。这样,对于John的账户来说,最终账户的余额应该是还是1000 ...
  Servlet:  当然,在servlet中,一般跳转都发生在doGet, doPost等方法里面。 一、原理  1) redirect 方式  response.sendRedirect("/a.jsp");  页面的路径是相对路径。sendRedirect可以将页面跳转到任何页面,不一定局限于本web应用中 ...
要直接在自己的代码中读取spring的bean,我们除了根据常用的set外,也可以通过spring的BeanFactoryAware接口实现,只要实现setBeanFactory方法就可以, private BeanFactory               beanFactory; public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } 这样我们就可以直接拿东西用了,如 Object  object = beanFactory ...
      本人最近在使用oracle的rownum实现分页显示的时候,对rownum做了进一步的分析和研究。现归纳如下,希望能给大家带来收获。       对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。 举例说明: 例如表:student(学生)表,表结构为: ID       char(6)      --学号 name    VARCHAR2(10)   --姓名 create table student (ID char(6), ...
今天配置nginx+tomcat了解了这么一个东西,nginx转发40000端口并配置证书,访问nginx的时候实际用的url是https://www.aaa.com,tomcat的端口配置成40000,工程里面的端口配置443.实际的访问是这个样子的,nginx解析url转发到40000端口的tomcat上,处理相应url的请求,内部nginx和tomcat用的是http的协议应用里面的端口和协议应该和外部访问nginx的端口协议相同. 另外在负载均衡的时候不能使用spring的定时任务会有问题,暂时采用linux里面的crontab服务,用wget来访问请求,在这里可能会有权限的问题,需要 ...
tomcat 在5.5以后,就没有自带admin项目了,如果要从http://localhost:8080界面进入tomcat管理页面,需要从网上下载对应的 tomcat-admin.zip,举个例子,如果你的tomcat是5.5.30的,需要从http://tomcat.apache.org /download-55.cgi下载(在下载页面的Binary D ...
1 定义头和根元素   部署描述符文件就像所有XML文件一样,必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。 DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2 ...
1、用鼠标选中你要设置的虚拟机(有的可能装了了多个),点右键—“设置”—“硬件”—“以太网” 在“网路连接”那项选中“NAT”,点 确定 2、点虚拟机菜单栏,也就是左上角的“编辑”,选中“虚拟网络设置”,点“自动桥接”,如果在该选项的小方框里打了勾的,请把勾去掉,没打勾的不用更改;点“DHCP”选择“开始”—“应用”;点“NAT”,再点“启动”—“应用”,最后点击“确定”保存即可,现在启动一下虚拟机; 注意:在进行上述操作时虚拟机最好处于关闭状态,设置好再启动
Global site tag (gtag.js) - Google Analytics