1.java的线程是通过java.lang.Thread类来实现的,进程是一个静态的概念 多进程:在操作系统中能同时运行多个任务 多线程:在同一个应用程序中有多个顺序流同时执行 2.每个线程通过Thread的实例来创建新的线程 3.每个线程通过调用Thread类的start()方法来启动一个线程 4.每个线程都是通过某个特定的Thread对象所应用的的方法run()来完成,方法run()为线程体,当一个线程调用它的start()方法后,虚拟机就会去调用这个线程中的run()方法。 如myThread是一个线程对象,调用myThread.start();后,当CPU轮到这个线程使用时,虚拟机就会去调用这个线程的run()方法。 5.可以通过两种方式创建新的线程,一种是定义线程实现Runnable接口,如: Thread myThread = new Thread (target)//target为Runnable接口类型 另一种可以定义一个Thread的子类重写其run()方法,如 class MyThread extends Thread{ public void run(){......} } 6.线程中的sleep方法,可以调用Thread的静态方法,使当前的线程休眠,可以由类直接调用 线程中的join方法,用来合并某个线程 线程中的yied方法,让出CPU,把执行的机会给其他线程 notify叫醒线程 7.当某个对象被synchronized修饰时,表明该对象在任一时刻只能由一个线程访问 synchronized(this){}//锁定当前对象 public synchronized void aa(String name){}//锁定当前方法中的对象 8.wait和sleep的区别: wait时别的线程可以访问锁定该对象,调用wait方法的时候必须锁定该对象 sleep时别的对象也不能访问锁定的对象 9.程序应用举例:
public class Test implements Runnable{//实现Runnable接口 Timer timer = new Timer();//创建一个timer对象 public static void main(String[] args) { Test aa = new Test(); Thread a1 = new Thread(aa);//创建线程 Thread a2 = new Thread(aa); a1.setName("a1");//为线程命名 a2.setName("a2"); a1.start();//启动线程 a2.start(); } public void run(){//当一个线程调用它的start()方法后,虚拟机就会去调用这个线程中的run()方法 timer.add(Thread.currentThread().getName());//获得当前线程的名字 } } class Timer{ private static int num = 0;//用于计数 public synchronized void add(String name){//锁定当前方法中的对象,在执行中不至于被打断 num++; try{ Thread.sleep(1); }catch(InterruptedException e){ System.out.println(name+"是第"+num+"线程"); } } }