当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:12:00  来源:本站整理

Java线程:线程的同步-同步办法[Java编程]

赞助商链接



  本文“Java线程:线程的同步-同步办法[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

线程的同步是Java多线程编程的难点,常常开辟者搞不清楚什么是竞争资源、什么时刻需求考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需求考虑,能否有竞争资源被同时窜改的问题?

在本文之前,请参阅《Java线程:线程的同步与锁》,本文是在此底子上所写的.

关于同步,在具体的Java代码中需求完成一下两个操作:

把竞争拜候的资源标识为private;

同步哪些改正变量的代码,利用synchronized关键字同步办法或代码.

当然这不是唯一掌握并发安全的途径.

synchronized关键字利用阐明

synchronized只能标志非抽象的办法,不能标识成员变量.

为了演示同步办法的利用,构建了一个信誉卡账户,起先信誉额为100w,然后模拟透支、存款等多个操作.明显银行账户User对象是个竞争资源,而多个并发操作的是账户办法oper(int x),当然应当在此办法上加上同步,并将账户的余额设为私有变量,禁止直接拜候.

/**
* Java线程:线程的同步
*
* @author leizhimin
*/
public class Test {
         public static void main(String[] args) {
                 User u = new User("张三", 100);
                 MyThread t1 = new MyThread("线程A", u, 20);
                 MyThread t2 = new MyThread("线程B", u, -60);
                 MyThread t3 = new MyThread("线程C", u, -80);
                 MyThread t4 = new MyThread("线程D", u, -30);
                 MyThread t5 = new MyThread("线程E", u, 32);
                 MyThread t6 = new MyThread("线程F", u, 21);
                 t1.start();
                 t2.start();
                 t3.start();
                 t4.start();
                 t5.start();
                 t6.start();
         }
}
class MyThread extends Thread {
         private User u;
         private int y = 0;
         MyThread(String name, User u, int y) {
                 super(name);
                 this.u = u;
                 this.y = y;
         }
         public void run() {
                 u.oper(y);
         }
}
class User {
         private String code;
         private int cash;
         User(String code, int cash) {
                 this.code = code;
                 this.cash = cash;
         }
         public String getCode() {
                 return code;
         }
         public void setCode(String code) {
                 this.code = code;
         }
         /**
          * 业务办法
          * @param x 增添x万元
          */
         public synchronized void oper(int x) {
                 try {
                         Thread.sleep(10L);
                         this.cash += x;
                         System.out.println(Thread.currentThread().getName() + "运行完毕,增添“" + x + "”,当前用户账户余额为:" + cash);
                         Thread.sleep(10L);
                 } catch (InterruptedException e) {
                         e.printStackTrace();
                 }
         }
         @Override
         public String toString() {
                 return "User{" +
                                 "code='" + code + '\'' +
                                 ", cash=" + cash +
                                 '}';
         }
}


  以上是“Java线程:线程的同步-同步办法[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .