I was practicing multithreading in java and wrote the below code
class Printer { synchronized void printHi(String x) { System.out.println(x); } } class MyThread extends Thread { Printer objm; MyThread(Printer a) { objm = a; } @Override public void run() { for (int i = 0; i < 10; i++) { objm.printHi("MyThread" + i); } } } class YourThread extends Thread { Printer objy; YourThread(Printer a) { objy = a; } @Override public void run() { for (int i = 0; i < 10; i++) { objy.printHi("YourThread" + i); } } } public class test { public static void main(String[] args) { Printer ob = new Printer(); MyThread mt = new MyThread(ob); YourThread yt = new YourThread(ob); mt.start(); yt.start(); } } Sometimes I gets the output as:
MyThread0 YourThread0 MyThread1 YourThread1 MyThread2 YourThread2 MyThread3 YourThread3 YourThread4 MyThread4 MyThread5 MyThread6 YourThread5 MyThread7 YourThread6 MyThread8 MyThread9 YourThread7 YourThread8 YourThread9 Which is asynchronous. Why is it so even after making the function printHi() as synchronized?
synchronization!=order