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中单继承带来的问题。
3、run()方法和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等待该线程终止。