若方法为非静态方法,作用的范围是一个对象
不同线程的同一对象调用该方法时会发生堵塞
- //调用相同的对象synchronized public void runTest() { // 修饰非静态的方法
- for (int i = 0; i < 5; ++i) {
- Count++;
- System.out.println(Thread.currentThread().getName() + " " + Count);
- }
- }
通过以下代码调用
- Test test = new Test();
- Thread thread_one = new Thread(test, "Thread_ONE");
- Thread thread_two = new Thread(test, "Thread_Two");
- thread_one.start();
- thread_two.start();
结果是
- Thread_ONE 1
- Thread_ONE 2
- Thread_ONE 3
- Thread_ONE 4
- Thread_ONE 5
- Thread_Two 6
- Thread_Two 7
- Thread_Two 8
- Thread_Two 9
- Thread_Two 10
由于该调用是二个 thread 任务中的对象是同一个 test,第一个 thread 任务运行时,会将第二个任务堵塞若对象不是同一个,则不会发生堵塞
- //调用二个不同的对象
- Thread thread_one = new Thread(new Test(), "Thread_ONE");
- Thread thread_two = new Thread(new Test(), "Thread_Two");
- thread_one.start();
- thread_two.start();
结果是
- Thread_Two 2
- Thread_ONE 1
- Thread_Two 3
- Thread_ONE 4
- Thread_Two 5
- Thread_ONE 6
- Thread_Two 7
- Thread_ONE 8
- Thread_Two 9
- Thread_ONE 10
来源: http://www.bubuko.com/infodetail-2448571.html