知乎专栏 |
package cn.netkiller.thread; public class SynchronizedThread extends Thread { private int count = 0; @Override public /*synchronized*/ void run() { count++; System.out.println(Thread.currentThread().getName() + " count:" + count); } public static void main(String[] args) { SynchronizedThread myThread = new SynchronizedThread(); Thread thread1 = new Thread(myThread, "thread1"); Thread thread2 = new Thread(myThread, "thread2"); Thread thread3 = new Thread(myThread, "thread3"); Thread thread4 = new Thread(myThread, "thread4"); Thread thread5 = new Thread(myThread, "thread5"); thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); } }
线程运行不分先后
thread2 count:3 thread4 count:4 thread1 count:3 thread3 count:3 thread5 count:5
package cn.netkiller.thread; public class SynchronizedThread extends Thread { private int count = 0; @Override public synchronized void run() { count++; System.out.println(Thread.currentThread().getName() + " count:" + count); } public static void main(String[] args) { SynchronizedThread myThread = new SynchronizedThread(); Thread thread1 = new Thread(myThread, "thread1"); Thread thread2 = new Thread(myThread, "thread2"); Thread thread3 = new Thread(myThread, "thread3"); Thread thread4 = new Thread(myThread, "thread4"); Thread thread5 = new Thread(myThread, "thread5"); thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); } }
thread1 count:1 thread5 count:2 thread4 count:3 thread2 count:4 thread3 count:5
package cn.netkiller.thread; public class MultiThread { private static int count = 0; public synchronized void add() { count++; System.out.println(Thread.currentThread().getName() + " count:" + count); } public static void main(String[] args) throws InterruptedException { final MultiThread multiThread1 = new MultiThread(); final MultiThread multiThread2 = new MultiThread(); final MultiThread multiThread3 = new MultiThread(); final MultiThread multiThread4 = new MultiThread(); final MultiThread multiThread5 = new MultiThread(); new Thread(new Runnable() { public void run() { multiThread1.add(); } }).start(); new Thread(new Runnable() { public void run() { multiThread2.add(); } }).start(); new Thread(new Runnable() { public void run() { multiThread3.add(); } }).start(); new Thread(new Runnable() { public void run() { multiThread4.add(); } }).start(); new Thread(new Runnable() { public void run() { multiThread5.add(); } }).start(); } }