多线程相关
多线程相关:
1.线程跟进程的区别?
线程是进程的执行单元。
线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。
详解:http://blog.csdn.net/mxsgoden/article/details/8821936
2.并发和并行
并行是指同一时刻,有多条指令在多个处理器上同时执行
并发是指同一时刻只能由一条指令执行,但过个进程指令被轮换执行,宏观上具有多个进程同时执行的效果
3.线程的创建和启动
--创建分两种方式:继承Thread类和实现Runnable接口
//继承Thread类来实现多线程
public class TestThread extends Thread{
private int i;
public void run(){
for(int i = 0;i < 100; i ++){
System.out.println(getName()+" " + i);
}
}
public static void main(String[] args){
for(int i = 0;i < 100; i ++){
System.out.println(Thread.currentThread.getName()+" " + i);
if(i == 20){
new TestThread().start();
new TestThread().start();
}
}
}
}
//实现Runnable接口来实现多线程
public class TestRunnable implements Runnable{
private int i;
public void run(){
for(int i = 0; i < 100; i ++){
System.out.println(Thread.currentThread().getName()+" " + i);
}
}
public static void main(String[] args){
for(int i = 0;i < 100;i ++){
System.out.println(Thread.currentThread().getName()+" " + i);
if(i == 20){
TestRunnable rt = new TestRunnable();
new Thread(rt,"new Thread1").start();
new Thread(rt,"new Thread2").start();
}
}
}
}
启动线程使用start() 而不是run()
4.线程的生命周期:
new(新建) -> Runnable(就绪) -> Running(运行) ->Blocket(阻塞) -> Dead(死亡)
5.join()方法--一个线程等待另一个线程执行完毕,再继续执行。eg:A线程调用了B线程的join()方法,A就需要等待B线程执行完毕以后才能继续执行。
6.后台线程--Daemon:所有线程都死亡,后台线程也会自动死亡
setDaemon() 设置一个线程为后台线程,必须在start()之前调用
isDaemon()
7.线程睡眠--sleep()
8.线程让步 yield() 让给同一优先级或比当前优先级高的线程,可以用设置优先级来做比较
9.线程同步
synchronized
同步锁 lock