线程与进程
一、线程与进程介绍
-
一个进程中可以同时存在多个线程
-
各个线程之间可以并发地执行
-
各个线程之间可以共享地址空间。进程 = 线程 + 资源平台
二、Java创建线程
-
通过继承
Thread
类来创建一个线程 -
通过实现
Runnable
接口来创建一个线程 -
Thread的构造器
-
Thread()
-
Thread(String name)
-
Thread(Runnable target)
-
Thread(Runnable target, String name)
-
Thread(ThreadGroup group, Runnable target)
-
Thread(ThreadGroup group, String name)
-
三、线程的启动
-
使用
start()
方法,线程进入Runnable(可运行)
状态,它将向线程调度器注册这个线程 -
不要直接在程序中调用线程的
run()
方法
四、两种线程创建方式的比较
-
1、使用Runnable接口
-
可以将代码和数据分开,形成清晰的模型
-
还可以从其他类继承
-
保持程序风格的一致性
-
-
2、直接继承Thread类
-
不能再从其他类继承
-
编写简单,可以直接操纵线程
-
五、代码实战
代码的详细解读,可以参考视频教程
通过继承 Thread 类实现线程:MyThread.java
package com.qicong.gj.c29;
/**
* User: 祁大聪
*/
public class MyThread extends Thread{
MyThread(String name){
super(name);
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " 线程运行开始");
System.out.println(Thread.currentThread().getName() + "线程运行结束");
}
public static void main(String[] args) {
System.out.println("main 是一个进程,开始了");
MyThread t1 = new MyThread("线程一 ");
t1.start();
MyThread t2 = new MyThread("线程二 ");
t2.start();
System.out.println("main 是一个进程,结束了");
}
}
通过实现 Runnable 接口实现线程:RunThread.java
package com.qicong.gj.c29;
/**
* User: 祁大聪
*/
public class RunThread implements Runnable{
@Override
public void run() {
System.out.println("RunThread is running");
}
public static void main(String[] args) {
RunThread t1 = new RunThread();
Thread td = new Thread(t1);
td.start();
}
}
测试类:S29.java
package com.qicong.gj.c29;
/**
* User: 祁大聪
*/
public class S29 {
static Object obj;
public static void main(String[] args) {
System.out.println("进程开始");
Thread t1 = new Thread();
Thread t2 = new Thread();
t1.start();
t2.start();
System.out.println("进程结束");
}
}