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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
