Java多线程及同步实现原理 - 编程入门网
ad.sleep(100); } catch(InterruptedException e) { System.out.println("Interrupted"); } } } public synchronized void run() { for(int i=0; i<3; i++) { System.out.println(Thread.currentThread().getName() + " : " + i); try { Thread.sleep(100); } catch(InterruptedException e) { System.out.println("Interrupted"); } } }} public class TestThread { public static void main(String[] args) { TestSynchronized t1 = new TestSynchronized("t1"); TestSynchronized t2 = new TestSynchronized("t2"); t1.start(); t1.start(); //(1) //t2.start(); (2) }}
运行结果为: t1 : 0 t1 : 1 t1 : 2 t1 : 0 t1 : 1 t1 : 2 由于是同一个对象启动的不同线程,所以run()函数实现了synchronized。如果去掉(2)的注释,把代码(1)注释掉,结果将变为: t1 : 0 t2 : 0 t1 : 1 t2 : 1 t1 : 2 t2 : 2 由于t1和t2是两个对象,所以它们所启动的线程可同时访问run()函数。 Java多线程及同步实现原理(3)时间:2007-11-052.2 通过实现Runnable接口实现多线程 如果有一个类,它已继承了某个类,又想实现多线程,那就可以通过实现Runnable接口来实现。 1) Runnable接口只有一个run()函数。 2) 把一个实现了Runnable接口的对象作为参数产生一个Thread对象,再调用Thread对象的start()函数就可执行并行操作。如果在产生一个Thread对象时以一个Runnable接口的实现类的对象作为参数,那么在调用start()函数时,start()会调用Runnable接口的实现类中的run()函数。 例3.1: public class TestThread implements Runnable{ private static int threadCount = 0; private int threadNum = ++threadCount; private int i = 5; public void run() { while(true) { try { Thread.sleep(100); } catch(InterruptedException e) { System.out.println("Interrupted"); } System.out.println("Thread " + threadNum + " = " + i); if(--i==0) return; } } public static void main(String[] args) { for(int i=0; i<5; i++) new Thread(new TestThread()).start(); //(1) }}
运行结果为: Thread 1 = 5 Thread 2 = 5 Thread 3 = 5 Thread 4 = 5 Thread 5 = 5 Thread 1 = 4 Thread 2 = 4 Thread 3 = 4 Thread 4 = 4 Thread 4 = 3 Thread 5 = 4 Thread 1 = 3 Thread 2 = 3 Thread 3 = 3 Thread 4 = 2 Thread 5 = 3 Thread 1 = 2 Thread 2 = 2 Thread 3 = 2 Thread 4 = 1 Thread 5 = 2 Thread 1 = 1 Thread 2 = 1 Thread 3 = 1 Thread 5 = 1 例3是对例2的修改,它通过实现Runnable接口来实现并行处理。代码(1)处可见,要调用TestThread中的并行操作部分,要把一个TestThread对象作为参数来产生Thread对象,再调用Thread对象的start()函数。 Java多线程及同步实现原理(4)时间:2007-11-053) 同一个实现了Runnable接口的对象作为参数产生的所有Thread对象是同一对象下的线程。 例3.2: package mypackage1;public class TestThread implements Runnable{ public synchronized void run() { for(int i=0; i<5; i++) { System.out.println(Thread.currentThread().getName() + " : " + i); try |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |