/**
* Java线程:线程同步-同步代码块
*
* @author leizhimin 2009-11-4 11:23:32
*/
public Test {
public void (String args) {
User u = User("张 3", 100);
MyThread t1 = MyThread("线程A", u, 20);
MyThread t2 = MyThread("线程B", u, -60);
MyThread t3 = MyThread("线程C", u, -80);
MyThread t4 = MyThread("线程D", u, -30);
MyThread t5 = MyThread("线程E", u, 32);
MyThread t6 = MyThread("线程F", u, 21);
t1.start;
t2.start;
t3.start;
t4.start;
t5.start;
t6.start;
}
}
MyThread extends Thread {
private User u;
private y = 0;
MyThread(String name, User u, y) {
super(name);
this.u = u;
this.y = y;
}
public void run {
u.oper(y);
}
}
User {
private String code;
private cash;
User(String code, cash) {
this.code = code;
this.cash = cash;
}
public String getCode {
code;
}
public void Code(String code) {
this.code = code;
}
/**
* 业务思路方法
*
* @param x 添加x万元
*/
public void oper( x) {
try {
Thread.sleep(10L);
synchronized (this) {
this.cash x;
.out.prln(Thread.currentThread.getName + "运行结束增加“" + x + "”当前用户账户余额为:" + cash);
}
Thread.sleep(10L);
} catch (InterruptedException e) {
e.prStackTrace;
}
}
@Override
public String toString {
"User{" +
"code='" + code + '\'' +
", cash=" + cash +
'}';
}
}
线程E运行结束增加“32”当前用户账户余额为:132
线程B运行结束增加“-60”当前用户账户余额为:72
线程D运行结束增加“-30”当前用户账户余额为:42
线程F运行结束增加“21”当前用户账户余额为:63
线程C运行结束增加“-80”当前用户账户余额为:-17
线程A运行结束增加“20”当前用户账户余额为:3
Process finished with exit code 0
注意:
在使用synchronized关键字时候应该尽可能避免在synchronized思路方法或synchronized块中使用sleep或者yield思路方法synchronized块占有着对象锁你休息那么其他线程只能边等着你醒来执行完了才能执行不但严重影响效率也不合逻辑
同样在同步块内yeild思路方法让出CPU资源也没有意义你占用着锁其他互斥线程还是无法访问同步块当然和同步块无关线程可以获得更多执行时间
最新评论