关于多线程问题,请教???

public class TestSyncTest {
public static void main(String[] args) {
​​TestSync job = new TestSync();
​​Thread jia = new Thread(job);
​ ​Thread yi = new Thread(job);
​ ​jia.setName("甲");
​​yi.setName("乙");
​ ​jia.start();
​​yi.start();
}
}

class TestSync implements Runnable {
​private int balance;
​public void run() {
​ ​for (int i = 0; i < 30; i++) {
​ ​​increment();
​ ​​System.out.println("余额为 :" + balance + "---------"+ Thread.currentThread().getName() +"在操作");
​ ​}
}
​public synchronized void increment() {
​ ​int i = balance;// 余额
​ ​balance = i + 1;

​}

}


为什么输出来 并不是同步的
控制台输出结果??????????????
余额为 :1---------甲在操作
余额为 :2---------乙在操作
余额为 :4---------乙在操作
余额为 :5---------乙在操作
余额为 :3---------甲在操作
余额为 :6---------乙在操作
余额为 :7---------甲在操作
余额为 :8---------乙在操作
余额为 :9---------甲在操作
余额为 :11---------甲在操作
余额为 :12---------甲在操作
余额为 :13---------甲在操作
余额为 :14---------甲在操作
余额为 :15---------甲在操作
余额为 :16---------甲在操作
余额为 :17---------甲在操作
余额为 :18---------甲在操作
余额为 :19---------甲在操作
余额为 :20---------甲在操作
余额为 :21---------甲在操作
余额为 :22---------甲在操作
余额为 :23---------甲在操作
余额为 :24---------甲在操作
余额为 :25---------甲在操作
余额为 :26---------甲在操作
余额为 :27---------甲在操作
余额为 :28---------甲在操作
余额为 :29---------甲在操作
余额为 :30---------甲在操作
余额为 :31---------甲在操作
余额为 :32---------甲在操作
余额为 :33---------甲在操作
余额为 :34---------甲在操作
余额为 :35---------甲在操作
余额为 :36---------甲在操作
余额为 :10---------乙在操作
余额为 :37---------乙在操作
余额为 :38---------乙在操作
余额为 :39---------乙在操作
余额为 :40---------乙在操作
余额为 :41---------乙在操作
余额为 :42---------乙在操作
余额为 :43---------乙在操作
余额为 :44---------乙在操作
余额为 :45---------乙在操作
余额为 :46---------乙在操作
余额为 :47---------乙在操作
余额为 :48---------乙在操作
余额为 :49---------乙在操作
余额为 :50---------乙在操作
余额为 :51---------乙在操作
余额为 :52---------乙在操作
余额为 :53---------乙在操作
余额为 :54---------乙在操作
余额为 :55---------乙在操作
余额为 :56---------乙在操作
余额为 :57---------乙在操作
余额为 :58---------乙在操作
余额为 :59---------乙在操作
余额为 :60---------乙在操作

甲乙线程各自循环中都在抢increment方法 谁抢到都可能 而且和这个不相关 直接调的打印方法 谁都可能先执行