java的多线程技术相对来说还是比较好的,下面就简单的做个总结吧!由于本人也没什么经验,不到之处望各位博友海涵,谅解,纠正指出!

首先是如何创建线程,总的来说有两种方式来创建线程,

1、继承Thread类,重写Thread类的run()方法,例如:class T extends Thread{},然后实例化该类对象,T t=new T(); 因为T继承自Thread类,t可以直接调用start()方法,然后JVM就会自动调用该类重写的run()方法,启动一个线程。

上面创建线程的方法虽然看起来挺好的,但是java中不允许多重继承,如果想多继承几个类,那就麻烦了,所以有了下面第2种创建线程的方法

2、实现Runnable接口,创建线程

Runnable接口中只有一个方法,那就是run()方法。例如,class R implements Runnable{},

首先要实例化R,即:R r=new R(); Thread tr=new Thread(r); tr.start();这样就可以启动一个线程。

建议最好使用实现Runnable接口这个方式来创建线程,以避免java中单继承带来的问题。

3run()方法和start()方法的区别   方法调用和线程启动

直接调用run()方法就会等到run()中的内容执行完后,再回去执行main方法;

而用strat()启动线程,进入就绪状态,JVM就会调用线程的run()方法,和main方法交替执行

run()结束,线程就结束。

4、wait  sleep区别:
wait时别的线程可以访问锁定对象 (调用wait方法的时候必须锁定该对象)

Wait方法在java.lang.Object中,是Object类的方法,
sleep时别的线程也不可以访问锁定对象

5、线程同步:

synchronized(this){
 .......
 ......
}
当执行这段代码的过程中锁定当前对象

6、常用方法:

public static void yield()     暂停当前正在执行的线程对象,并执行其他线程。
public static Thread currentThread()    返回对当前正在执行的线程对象的引用。
public static void sleep(long millis)
                  throws InterruptedException        在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权。
public final void setPriority(int newPriority)       更改线程的优先级。
public final int getPriority()        返回线程的优先级。

Thread.currentThread()----------------->拿到当前线程

public static Thread currentThread()返回对当前正在执行的线程对象的引用。

public final void join()throws InterruptedException等待该线程终止。