JUC多线程(三天) 第一天
1. 进程和线程的区别
进程: 有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至少有一个线程
线程: 堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小的多
注意:
Java程序的进程里面至少包含两个线程,主线程也就是main()方法线程, 另一个是垃圾回收机制线程.每当使用java命令执行一个类时, 实际上都会启动一个JVM ,每一个JVM实际上就是一个在操作系统中启动了一个线程. java本身具备了垃圾回收机制,所以在Java运行时至少会启动两个线程.
2. 多线程的创建
1.继承Thread类 重写run()方法
public static void main(String[] args) {
new CreateThread().start();
new CreateThread().start();
}
static class CreateThread extends Thread{
@Override
public void run() {
// super.run();
String name = Thread.currentThread().getName();
for (int i = 0; i < 5; i++) {
System.out.println(name+"内容是"+i);
}
}
}
2. 实现Runnable接口 重写run方法
注意:实际上所有的多线程代码都是通过运行Thread的start()方法来运行的。因此,不管 是继承Thread类还是实现Runnable接口来实现多线程,最终还是通过Thread的对象的 API来控制线程的。
public static void main(String[] args) {
CreateRunnabl createRunnabl = new CreateRunnabl();
new Thread(createRunnabl).start();
new Thread(createRunnabl).start();
}
static class CreateRunnabl implements Runnable{
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 5; i++) {
System.out.println(name+"内容是"+i);
}
}
}
//第二种方式
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 5; i++) {
System.out.println(name+"内容是"+i);
}
}
}).start();
new Thread(new Runnable() {
public void run() {
String name = Thread.currentThread().getName();
for (int i = 0; i < 5; i++) {
System.out.println(name+"内容是"+i);
}
}
}).start();
}
}