多线程

1、线程和进程的区别

  ①线程:是一个程序内部不同的执行路径,可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。

  ②进程:静态的,包含多个线程,每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销。

2、创建线程的两种方式

  ①创建一个类继承Thread类

public class TestDemo {

public static void main(String[] args) {

ThreadDemo demo1=new ThreadDemo("线程A");

ThreadDemo demo2=new ThreadDemo("线程B");

demo1.start();

demo2.start();

}

}

class ThreadDemo extends Thread{

private String name;

public ThreadDemo(String name){

this.name=name;

}

@Override

public void run() {

for(int i=0;i<10;i++){

System.out.println(name+"运行,i="+i);

}

}

}

  ②创建一个类实现Runnable接口

  

public class ThreadDemo02 {

public static void main(String[] args) {

MyThread myThread=new MyThread("线程A");

Thread thread=new Thread(myThread);

thread.start();

new Thread(myThread).start();

    }

}

class MyThread implements Runnable{

private String name;

public MyThread(String name){

this.name=name;

}

public void run(){

for(int i=0;i<10;i++){

System.out.println(name+"运行,i="+i);

}

}

}

3、创建线程使用实现Runnable接口的好处

  ①可以避免由于单继承带来的局限性

  ②可以实现资源共享的目的

4、线程状态的切换

  

5、线程控制常用方法
  ①isAlive() 判断线程是否还活着,即线程是否还未终止
  ②getPriority() 获得线程的优先级数值
  ③setPriority() 设置线程的优先级数值
  ④sleep() 将当前线程睡眠指定多少毫秒数
  ⑤join() 某线程调用该方法,等待该线程结束,再恢复当前线程的运行
  ⑥yield() 让出CPU,当前线程进入就绪队列等待调度
  ⑦wait() 当前线程进入对象的wait pool
  ⑧notify()/notifyAll() 唤醒对象的wait pool 中的一个/所有等待的线程
  ⑨setDaemon(boolean on) 将线程标记为守护线程或用户线程,当正在运行的线程都是守护线程时,JVM退出,该方法必须在启动线程前用
原文地址:https://www.cnblogs.com/rrb520/p/5272406.html