要想了解多线程首先腰线了解什么是进程,什么是线程。
进程
进程是具有独立功能的程序,是系统调度和资源分配的基本单元。具有动态,并发, 独立的特性。
线程
线程是进程的组成单元,是进程内部的执行单元,进程就是由若干个线程组成的,线程共享进程的资源。
多线程
java语言提供了并发机制,程序员可以在程序中执行多个线程, 每个线程完成一个功能,并与其它线程并发执行,这种并发机制就是多线程。
多线程的实现有两种方式:
- 通过集成Thread类,重写run()方法,其中线程的功能代码就卸载run()方法中。最后执行start()运行。
- 实现Runnable接口。建立一个Runnable的对象,使用Runnable对象的构造方法创建Thread实例。然后启动start()方法。
比较继承Thread类创建多线程和实现Runnable创建多线程的优缺点:
- 由于java是单继承, 继承Thread类之后将不能够继承其他类。而实现Runnable接口后仍然可以继承类和实现其他接口。
- 实现Runnable接口创建多线程,便于实现线程共享进程的资源。
用继承Thread类实现多线程:
public class MyThread extends Thread{
@Override
public void run() {
while(true){
System.out.println("我是一个线程我正在运行!");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Testthread {
public static void main(String[] args) {
MyThread mt = new MyThread();
System.out.println("我是主线程!");
mt.start();
while(true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("主线程的进程结束了!");
}
}
}
实现Runnable创建多线程:
public class BankRunnable implements Runnable {
private int money = 100;
private String s ="youren";
@Override
public void run() {
synchronized (s) {
if(money>0){
System.out.println(Thread.currentThread().getName()+"取到了现金"+money+"元");
money=money-100;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(money==0){
System.out.println(Thread.currentThread().getName()+"没有取到了现金");
}
}
}
}
public class TestRunnable {
public static void main(String[] args) {
BankRunnable runnable = new BankRunnable();
Thread t1 = new Thread(runnable, "小红");
Thread t2 = new Thread(runnable,"小名");
t1.start();
t2.start();
}
}
运行结果: