为了账号安全,请及时绑定邮箱和手机立即绑定

第37节:多线程安全问题

标签:
Java

webp

image

定义用户去银行存钱,每次存100,存3次

class Bank { // 总数
 private int sum;// 定义方法
 public void add(int num){  // 传入参数
  sum = sum + sum; // 加后的值
  System.out.println("sum"+sum);
 }
}class Demo implements Runnable{ // 定义银行类对象,创建实例对象
 private Bank  b = new Bank();// 线程run()
 public void run(){  for(int x=0; x<3; x++){   // 将参数放入对象方法中
   b.add(100)
  }
 }
}// 测试类class Test{ public static void main(String[] args){h  // 创建对象
  Demo d=new Demo(); // 创建线程对象
  Thread t1 = new Thread(d);
  Thread t2 = new Thread(d); // 线程开启
  t1.start();
  t2.start();
}
}

如果出现这个代码,出现了多线程安全问题。共性数据即共享对象中的数据。

class Bank { // 总数
 private int sum;// 创建对象
 private Object obj = new Object();// 定义方法
 public void add(int num){  synchronized(obj){  // 传入参数
  sum = sum + sum; // 加后的值
  System.out.println("sum"+sum);
 }
 }
}

安全问题,加了同步可以解决数据安全。

class Tickets implements Runnable{ private int tickets = 100; private Object obj = new Object(); public void run(){
  whilt(true){   synchronized(obj){    if(tickets>0){     try{
      Thread.sleep(1000);
     }catch(Exception e){
      System.out.println(Thread.currentThread().getName()+tickets);
     }
    }
   }
  }
 }
}

饿汉式

class Single{ private static final Single s = new Single(); private Single(){) public static Single getInstance(){  return s;
 }
}

懒汉式

class Single{ private static Single s = null; private Single(){} public static Single getInstance(){  if(s==null){
   s = new Single();
  } return s;
 }
}

多线程

在同一时间,做多件事情.

创建线程的方法
继承类Thread并重写run(),run()称为线程体;用这种方法定义的类不能再继承其他类。

class FirstThread extends Thread{public void run(){ for(int i=0;i<100;i++){
  System.out.println("FirstThread"+i);
 }
}
}class Test{public static void main(Sting args[]){
 FirstThread ft = new FirstThread();
 ft.start(); 
 for(int i = 0; i<100;i++){
  System.out.println("main"+i):
 }
}
}



作者:达叔小生
链接:https://www.jianshu.com/p/b70e73608856


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消