单线程是安全的,因为线程只有一个,不存在多个线程抢夺同一个资源
代码例子:
public class SingleThread {int num=10;public void add(){while(num<13){num++;try{Thread.sleep(1000);}catch(Exception e){System.out.println("中断");}System.out.println(num);}}public static void main(String[] args){Thread thread = Thread.currentThread(); //获取当前运行的线程对象thread.setName("单线程"); //线程重命名System.out.println(thread.getName()+"正在运行");SingleThread st=new SingleThread();st.add();}}多线程安全,synchronized同步代码块
synchronized(对象){}; //同步代码块
synchronized 返回值 方法名(){}; //同步方法
class One { int num=10; public void add(){ synchronized(this){ //同步代码块,同步方法也可以实现效果synchronized void add(){};num++; try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("中断"); } System.out.println(num); } }}class Two implements Runnable{ One one = new One(); @Override public void run() { one.add(); //调用add方法 }}public class Synch{ public static void main(String[] args) {Two two = new Two(); Thread t1 = new Thread(two); //创建三个子线程 Thread t2 = new Thread(two); Thread t3 = new Thread(two); t1.start(); t2.start(); t3.start(); }}注意:观察去除synchronized关键字的运行结果区别!
正常运行结果:
11
12
13