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();

  • 相关阅读:
    octotree神器 For Github and GitLab 火狐插件
    实用篇如何使用github(本地、远程)满足基本需求
    PPA(Personal Package Archives)简介、兴起、使用
    Sourse Insight使用过程中的常使用功能简介
    Sourse Insight使用教程及常见的问题解决办法
    github 遇到Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts问题解决
    二叉查找树的C语言实现(一)
    初识内核链表
    container_of 和 offsetof 宏详解
    用双向链表实现一个栈
  • 原文地址:https://www.cnblogs.com/zhouzetian/p/7601961.html
Copyright © 2011-2022 走看看