继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

第37节:多线程安全问题

青春有我
关注TA
已关注
手记 1199
粉丝 205
获赞 1008

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


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP