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