线程
1 线程介绍
思考:什么是进程?什么是线程?两者之间什么关系?
-
进程:就是一个正在运行的程序,比如:typeroa、eclipse、浏览器等等
-
线程:线程是进程中的一个执行单元,例如:QQ音乐播放音乐和下载音乐
-
关系:在一个进程中可以包含多个线程
-
当需要在同一个时刻去做多件事情时,就需要开启多个线程
-
关键词:Thread、Runnable
2 线程创建方式
-
在java中main函数称为主线程
-
多个线程之间的执行是互不影响的
-
两种线程方式如何选择?
-
选第二个,选择继承的话也就意味着该子类不能再继承其他类,扩展性不好
package cn.yunhe.thread;
public class ThreadDemo {
public static void main(String[] args) {
/*SubThread thread = new SubThread();
thread.start();
int a = 1/0;*/
//实现Runnable接口的类目的是为了定义任务
Runnable run = new SubRun();
//此处的Thread对象是用创建并开启线程的,它当中是没有指定的任务的
Thread thread = new Thread(run);
thread.start();
int a = 1/0;
}
}
class SubRun implements Runnable{
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程中的任务");
}
}
}
class SubThread extends Thread{
/**
* run方法用于定义该线程要执行的任务
*/
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("线程中的任务");
}
}
}
3 程序扩展
- 需求:同一个任务需要多个线程执行
package cn.yunhe.thread;
public class ThreadDemo2 {
public static void main(String[] args) {
/*//要执行的任务
PrimeRun primeRun = new PrimeRun();
//需求:同一个任务需要多个线程执行
Thread t1 = new Thread(primeRun);
t1.start();
Thread t2 = new Thread(primeRun);
t2.start();*/
PrimeThread primeThread = new PrimeThread();
primeThread.start();
PrimeThread primeThread2 = new PrimeThread();
primeThread2.start();
}
}
class PrimeRun implements Runnable{
@Override
public void run() {
System.out.println("haha");
}
}
class PrimeThread extends Thread{
@Override
public void run() {
System.out.println("hehe");
}
}