什么是进程,什么是线程
进程是一个应用程序(一个软件)<br /> 线程是进程中的执行场景/执行单元<br /> 一个进程可以启动多个线程 <br /> 最起码,现在的java程序至少有两个线程并发,一个执行main方法的主线程,一个垃圾回收线程.
线程和进程的关系
进程之间的内存不会共享<br /> java虚拟机中:堆内存和方法区是共享的,但是栈不共享,一个线程一个栈<br /> 假设有10个线程,那么就会有10个栈空间,各自相互独立运行,互不干扰,这就是多线程并发.<br /> java之所以有多线程机制,目的是为了提高程序处理的效率<br />
- 对于单核的CPU来说,真的可以做到多线程并发吗
不能真正做到多线程并发,但是可以给人一种多线程并发的感觉.
//分析程序之外有几个线程
public class Main{
public static void main(String []args){
}
}
实现线程的两种方式
第一种
- 编写一个类,继承java.lang.Thread,重写run方法(java支持多线程机制,已经将多线程实现了,我们只需要继承就可以了)
- 首先编写一个类,重写run方法
- 在主线程创建一个分支线程对象,—启动线程
```java
class MyThread extends Thread{
@Override
public void run() {
//编写程序运行在分支线程中(分支栈)
for (int i = 0; i < 1000; i++) {
} } }System.out.println("分支线程-->"+i);
public class Thread01 { public static void main(String[] args) { //这里是main方法,这里的代码属于主线程,在主栈中运行 //新建一个分支线程对象 MyThread myThread = new MyThread(); //启动线程 myThread.start();//在jvm中开启一个新的栈空间,立刻结束
for (int i = 0; i < 1000; i++) {
System.out.println("主线程-->"+i);
}
}
} //输出结果 主线程—>0 分支线程—>0 主线程—>1 分支线程—>1 主线程—>2 主线程—>3 主线程—>4
> MyThread.run 和MyThread.start的区别


<a name="9tmmZ"></a>
#### 第二种方式
```java
package ThreadTest;
public class ThreadT02 {
public static void main(String[] args) {
//创建一个可以运行的对象
MyRunnable r = new MyRunnable();
//将这个可以运行的对象封装成一个线程对象
Thread t = new Thread(r);
//启动线程
t.start();
}
}
//这并不是一个线程类,是一个可以运行的类
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("分支线程执行");
}
}
//采用接口的方式实现多线程
class Thread03{
public static void main(String[] args) {
new Thread(() -> System.out.println("分支线程匿名内部类和lambda表达式")).start();
}
}
线程的生命周期

