快速业务通道

Java多线程及同步实现原理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-25
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-05

2.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-05

3) 同一个实现了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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号