java - 多线程,锁

 

1.继承Thread
  * 定义类继承Thread
  * 重写run方法
  * 把新线程要作的事写在run方法中
  * 建立线程对象
  * 开启新线程, 内部会自动执行run方法


  public class Demo2_Thread {
    public static void main(String[] args) {
      MyThread mt = new MyThread();    //4,建立自定义类的对象
      mt.start();    //5,开启线程

      for(int i = 0; i < 3000; i++) {
      System.out.println("bb");
      }
    }
  }
  class MyThread extends Thread {    //1,定义类继承Thread
    public void run() {    //2,重写run方法
    for(int i = 0; i < 3000; i++) {    //3,将要执行的代码,写在run方法中
    System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
  }
}html

 

* 2.实现Runnable
  * 定义类实现Runnable接口
  * 实现run方法
  * 把新线程要作的事写在run方法中
  * 建立自定义的Runnable的子类对象
  * 建立Thread对象, 传入Runnable
  * 调用start()开启新线程, 内部会自动调用Runnable的run()方法ide

  public class Demo3_Runnable {
    public static void main(String[] args) {
      MyRunnable mr = new MyRunnable();    //4,建立自定义类对象
      //Runnable target = new MyRunnable();
      Thread t = new Thread(mr);    //5,将其看成参数传递给Thread的构造函数
      t.start();    //6,开启线程

      for(int i = 0; i < 3000; i++) {
        System.out.println("bb");
      }
    }
  }

  class MyRunnable implements Runnable {    //1,自定义类实现Runnable接口
    @Override
    public void run() {    //2,重写run方法
      for(int i = 0; i < 3000; i++) {    //3,将要执行的代码,写在run方法中
        System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
      }
    }
  }函数

 

 

匿名内部类:post

 

 

 

 

Java中守护线程的总结

  在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) this

  用个比较通俗的好比,任何一个守护线程都是整个JVM中全部非守护线程的保姆:url

  只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就所有工做;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工做。spa

  Daemon的做用是为其余线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。.net

  User和Daemon二者几乎没有区别,惟一的不一样之处就在于虚拟机的离开:若是 User Thread已经所有退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 由于没有了被守护者,Daemon也就没有工做可作了,也就没有继续运行程序的必要了。线程

Java中join()方法的理解

  thread.Join把指定的线程加入到当前线程,能够将两个交替执行的线程合并为顺序执行的线程。3d

  好比在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

  t.join();      //调用join方法,等待线程t执行完毕

  t.join(1000);  //等待 t 线程,等待时间是1000毫秒。

 

Java线程中yield()的用法

  Thread.yield()方法的做用:暂停当前正在执行的线程,并执行其余线程。(可能没有效果)

  yield()让当前正在运行的线程回到可运行状态,以容许具备相同优先级的其余线程得到运行的机会。所以,使用yield()的目的是让具备相同优先级的线程之间可以适当的轮换执行。可是,实际中没法保证yield()达到让步的目的,由于,让步的线程可能被线程调度程序

再次选中。

  结论:大多数状况下,yield()将致使线程从运行状态转到可运行状态,但有可能没有效果。

 

 

 

 

 锁对象要惟一的, this表明实例这个对象,每一个线程都会实例对象,致使不是惟一。 类.class 惟一

相关文章
相关标签/搜索