多线程之死锁产生

本篇楼主接着上篇多线程的安全问题继续讨论多线程的死锁问题。 我们可以构造这样一种场景:传统(理想)情况下,楼主吃饭必须用两支筷子,而楼主老板(美国人)吃饭必须要用一刀,一叉;现在,楼主手上有一支筷子和一把刀,老板手上有一支筷子和一把叉;当我们都在互相等待对方把餐具给我们时,出现相互等待的现象,都吃不了饭,从而形成死锁。 所以上篇所说到的解决多线程同步的安全问题又衍生出了:如果出现同步嵌套,就容易产生死锁的问题。上面的场景我们先用代码来实现看一看。 构建MyLock类,创建楼主,老板两个锁对象: 1 package com.jon.dielock; 2 3 public class MyLock{ 4 //创建2把所对象 5 public static final Object objA = new Object(); 6 public… Read More »多线程之死锁产生

线程安全问题

本文楼主主要以用户在售票厅购买车票为背景进行多线程的实现。假设A市到B市的车票共50张,共有3个售票窗口在进行售票,使用多线程来模拟理想情况下的用户购票: 实现Runnable的Ticket类: 1 package com.jon.thread; 2 3 public class TicketSell implements Runnable { 4 private int tickets = 50;//设置车票数量 5 @Override 6 public void run()… Read More »线程安全问题

Bean复制

有的时候我们需要将一个bean的属性赋值到另一个bean的属性中,比如用户提交过来的表单bean需要将该bean中的属性值赋值到对应的数据库bean,我们通常会以这样的方式做: 1 User user = new User("1", "Jon_China", "123456", "1992-11-17", "127.0.0.1"); 2 TargetUser target = new TargetUser(); 3 target.setId(user.getId()); 4 target.setUserName(user.getUserName()); 5 target.setPassword(user.getPassword()); 当bean的属性过多时是不是感觉“嘿打脑壳”。不要紧,Apache提供bean的copy工具BeanUtil.  当然是用也是比较简单的,楼主一步一步说明:… Read More »Bean复制

java中的ConcurrentModificationException异常

先看这样一段代码: List list = new ArrayList(); list.add("1"); list.add("2"); for (String temp : list) { if("1".equals(temp)){   list.remove(temp); } } 这是对一个集合进行简单迭代,当集合中的某一个元素与“1”相等则移除该元素,程序运行正常;此时我们把“1”换成“2”: List list = new ArrayList(); list.add("1");… Read More »java中的ConcurrentModificationException异常

C#中判断字符串相等的方法

可以使用如下方式: 1. String.Compare(str1, str2) == 0  或者  str1.CompareTo(str2) == 0 2. str1.Equals(str2)  或者 String.Equals(str1, str2) 这种方式的话,需要注意null的情况