zoukankan      html  css  js  c++  java
  • JAVA---多线程

    java的线程是通过java.lang.Thread类来实现

    VM启动时会有一个方法(public static void main(){})所定义的线程。

    可以通过创建Thread的实例来创建新的线程。

    每一个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()成为线程体。

    通过调用Thread类中的start()方法来启动一个线程。

    两种创建新线程的方式:

    1:

    定义线程实现Runnable接口

    Thread  myThread=new Thread(target);  //target为Runnable接口类型

    Runnable中只有一个方法:

    public void  run()://用以定义线程运行体。使用Runnable接口可以为多个线程提供共享的数据。

    在实现Runnable接口的类runn方法定义中可以使用Thread的静态方法:

    public static Thread currentThread();获取当前线程的引用。

    第二种:

    可以定义一个Thread的子类并重写其run方法如:

    class extends Thread{

              public void rMyThread run(){.....}

    }

    然后生成该类的对象:

    MyThread myThread=new MyThread(....);

    线程状态转换图:

    方法/功能

    isAlive();判断线程是否还“活“着,即线程是否还未终止。

    getPriority();获取线程的优先级数值。

    setPriority();设置线程的优先级数值

    Thread.sleep();将当前线程睡眠指定毫秒数

    join();调用某线程的方法,将当前线程与该线程合并,即等待该线程结束,再恢复当前线程的运营。

    yield();让出CPu,当前线程进入就绪队列等待调度。

    wait();当前线程进入对象的wait pool。

    notify();唤醒对象的wait pool中的一个

    notifyAll();所有等待线程

    关键字synchronized来与对象的互斥锁联系。当某个对象synchronized修饰时,表明该对象在任一时刻只能由一个线程访问。

    synchronize的使用方法:

    synchronized(this){

    num++;

    try{Thread.sleep(1);}

    catch(InterruptedException e){ }

    System.out.println("name+",你是第"+num+"个使用timer的线程");

    }

    ynchronized还可以放在方法声明中,表示整个方法为同步方法:

    sybchronized public void add(String name){....}

    1:wait()与sleep()方法的区别:

    相同点:都可以让线程进入等待状态;

    不同点:wait()只能放在锁里面,而sleep()可以任意地方调用此方法;wait()方法可以释放锁,而sleep()不可以;

    2:notify()方法:

    只能放在锁里面;它唤醒是第一个等待的线程(当然有时也可任意)

    3:wait() 与notify()方法的结合:

      一般步骤:

    先建一个A类--》定义一个A类的对象a,然后把它当做B线程的构造方法形参,写run()方法,锁住对象a,给它一个wait()的方法,此时B线程处于等待状态,但锁被释放了。--》重复步骤2,在C线程的run方法中唤醒a,此时B线程后面的语句就可以输出。

    A a=new A();

    B b=new B(a);

    C c=new C(a);

    b.start();c.start();

    5:注意事项:B线程和C线程那个先输出?为了避免其中一个线程后面的等待语句没有输出,最好用sleep()方法做一个先后。

    4‘匿名类:

    作用:节省代码量,方便,所提供的匿名类与匿名方法必须有关联,直接可以调用:

    Thread t=new Thread(){

    public void run(){

          .........代码......

                    }

                 };

    t.start();

  • 相关阅读:
    Maven3路程(一)用Maven创建第一个web项目(1)
    ECLIPSE下SVN的创建分支/合并/切换使用
    Oracle 客户端免安装数据库连接
    如何用Maven创建web项目(具体步骤)
    使用Eclipse构建Maven项目 (step-by-step)
    Maven安装配置
    动画基础(隐式动画)
    CA*Layer(CAReplicatorLayer--)
    CA*Layer(CATransformLayer--CAGradientLayer)
    CA*Layer(CAShapeLayer--CATextLayer)
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/7601961.html
Copyright © 2011-2022 走看看