Java线程基础学习

1. 线程和进程的区别?
1)什么是进程:例如一个exe文件,一个class文件,一个QQ程序,一个ppt
每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
2)什么是线程:一个程序里的执行路径。(一个程序内部的顺序控制流)
线程可以看做是轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器,线程切换的开销小。
3)多进程:在操作系统中能通知运行多个任务(程序),如QQ, PPT, Word, ...
4)多线程:在同一应用中有多个顺序流同时执行。

2.如何实现一个线程?
1)JVM启动时,主方法(public static void main() {})会启动一个线程。
2)线程具体的执行逻辑由Thread类的实例的run()方法来实现。
3)start()方法:启动一个线程。

3. 创建线程的两种方式:
1)实现Runnable接口:
实现Runnable接口的类要实现run()方法
然后在主线程中这样使用:Thread t1 = new Thread(MyThread); //MyThread为实现了Runnable接口的类
2)继承Thread类
MyThread t1 = new MyThread(); //MyThread是继承了Thread的类。

4. 线程的状态:

5. 线程控制的基本方法:
1)Thread.sleep(long millis):Thread类的static方法,让当前线程睡眠多少毫秒。
sleep方法不释放对象锁
2)stop(): 废弃了的方法,暴力地终止线程,并未关闭资源,相当于杀死线程。
3)join(): 相当于方法调用,执行完join方法的对象的线程,才能执行其他的线程。
join()方式示例:
public class TestJoin {
  public static void main(String[] args) {
    MyThread2 t1 = new MyThread2("abcde");
    t1.start();
    try {
    t1.join();
    } catch (InterruptedException e) {}
   
    for(int i=1;i<=10;i++){
      System.out.println("i am main thread");
    }
  }
}
class MyThread2 extends Thread {
  MyThread2(String s){
  super(s);
  }
 
  public void run(){
    for(int i =1;i<=10;i++){
      System.out.println("i am "+getName());
      try {
      sleep(1000);
      } catch (InterruptedException e) {
      return;
      }
    }
  }
}
在使用了jion()方法之后,只有当t1执行完后,才会去继续执行main方法。
4)yield(): 让出CUP, 给其他线程执行的机会,当前线程进入就绪队列等待调度。
注:当前线程仅让出一下,然后还参与竞争CUP.
5)wait(): 让当前线程进入等待池(wait pool)
6)notify()/notifyAll():

====================
多线程学习可参考: http://blog.csdn.net/lonelyroamer/article/details/7948329

猜你喜欢

转载自doudou-001.iteye.com/blog/2213819
今日推荐