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.synchronized方法的程序应用举例:
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+"线程");
}
}
}
JAVA之线程,布布扣,bubuko.com
JAVA之线程
原文:http://blog.csdn.net/u012505695/article/details/20390855