您现在的位置是:首页 >

java如何实现线程同步 Java线程和Objec之间的不解之缘

火烧 2022-08-29 02:25:08 1030
Java线程和O jec之间的不解之缘   Java线程在不断的发展 发展的过程中我们需要不断的学习相关代码的知识 下面我们就详细的看看如何进行相关技术信息的学习 在创建启动Java线程之前 先创建一

Java线程和Objec之间的不解之缘  

  Java线程在不断的发展 发展的过程中我们需要不断的学习相关代码的知识 下面我们就详细的看看如何进行相关技术信息的学习 在创建启动Java线程之前 先创建一个线程之间竞争使用的Object对象 然后将这个Object对象的引用传递给每一个线程对象的lock成员变量

  这样一来 每个线程的lock成员都指向同一个Object对象 我们在run方法中 对lock对象使用synchronzied块进行局部封锁 这样就可以让Java线程去竞争这个唯一的共享的对象锁 从而实现同步

  代码

   package vista;

   class MyThread implements java lang Runnable

   {

   private int threadId;

   private Object lock;

   public MyThread(int id Object obj)

   {

   this threadId = id;

   this lock = obj;

   }

   @Override

   public void run()

   {

   synchronized(lock)

   {

   for (int i = ; i < ; ++i)

   {

   System out println( Thread ID: + this threadId + : + i);

   }

   }

java如何实现线程同步 Java线程和Objec之间的不解之缘

   }

   }

   public class ThreadDemo

   {

   /**

   * @param args

   * @throws InterruptedException

   */

   public static void main(String[] args) throws InterruptedException

   {

   Object obj = new Object();

   for (int i = ; i < ; ++i)

   {

   new Thread(new MyThread(i obj)) start();

   Thread sleep( );

   }

   }

   }

  从第二段代码可知 同步的关键是多个Java线程对象竞争同一个共享资源即可 上面的代码中是通过外部创建共享资源 然后传递到Java线程中来实现 我们也可以利用类成员变量被所有类的实例所共享这一特性 因此可以将lock用静态成员对象来实现 代码如下所示

  代码

   package vista;

   class MyThread implements java lang Runnable

   {

   private int threadId;

   private static Object lock = new Object();

   public MyThread(int id)

   {

   this threadId = id;

   }

   @Override

   public void run()

   {

   synchronized(lock)

   {

   for (int i = ; i < ; ++i)

   {

   System out println( Thread ID: + this threadId + : + i);

   }

   }

   }

   }

   public class ThreadDemo

   {

   /**

   * @param args

   * @throws InterruptedException

   */

   public static void main(String[] args) throws InterruptedException

   {

   for (int i = ; i < ; ++i)

   {

   new Thread(new MyThread(i)) start();

   Thread sleep( );

   }

   }

   }

lishixinzhi/Article/program/Java/gj/201311/27336  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码