java 多线程,sleep()和wait()

java 线程可谓是java中重要的一个机制,在说线程之前需要知道什么是进程,进程和线程的关系是是什麽?

1.什么是进程?什么是线程?

  进程:用句简单的粗俗的来说,进程就是程序。进程是一个正在运行的程序!比如:打开一个记事本程序,那么这个正在运行的记事本程序就是一个进程。

  线程:线程是由进程所创建来执行某个功能的一个机制。那么也就是说,没有进程就没有线程。一个线程只能对应一个进程,一个进程却可以有多个线程的存在。

 

2.那么在java中如何创建一个线程?

  在java中创建线程有两个方法:

    一:通过类继承Thread实现线程创建。

    例:class Thread1 extends Thread {

        public void run() {

          System.out.println("hello, the world!");

        }

      }

      public class Text {

        public void main(String[] args) {

            new Thread1().start();

        }

      }

  二:通过实现Runnable来创建线程

  例:class Tread2 implements Runnable {

      public void run() {

        System.out.println("wellcome to Java world!");

      }

    }

 

    public void Text {

      public void main(String[] args) {

        new Thread(new Thread2()).start();

      }

    }

  同样两种方法都可以通过匿名内部类的方式创建线程。

3. sleep()和wait()是什麽?他们有什么区别,对同步有什么影响。

  sleep():是线程的一个睡眠方法,它可以接收long类型的参数作为睡眠的时间!当线程运行该方法时,线程会进入睡眠状态,把cpu时间片让出给其他线程使用。当参数时间之后,线程会自动唤醒,等待下一个时间片段继续执行。在睡眠期间,sleep()不会释放线程锁,也就是或,该线程所访问的同步块会一直被该线程占用,别的线程无法访问,直到线程重新启动,并释放线程锁。

  wait():是属于Object的类,wait()和sleep()都是使线程进入睡眠状态,但是wait()需要别的线程去使用Thread.notify()唤醒被wait()睡眠的线程,否则线程会一直处于睡眠状态,知道程序关闭。如果该线程正占用着同步资源,那么一直不唤醒,就会导致同步资源无法访问,避免这样,所以当wait()睡眠的线程会释放线程锁,让出cpu时间片段,当被唤醒的时候,该线程会重新等待下一次时间片段,重新进入同步块。

4.几个常用的线程方法

  Thread th = Thread.currentThread();  用于获取运行当前代码片段的线程

  long getId()  返回该线程的标识符

  String getName()  返回该线程的名称

  int getPriority()  返回线程的优先级

  Thread.state getState();  获取线程的状态

  boolean isAlive();  测试线程是否处于活动状态

  boolean isDaemon();  测试线程是否为守护线程

  boolean isInterrupted();  测试线程是否已经中断

 

 

 

      

posted @ 2017-02-22 17:21  tooGrasp  阅读(1863)  评论(0编辑  收藏  举报