Java基础部分 —— 线程
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。
线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是属于某个进程,进程中的多个线程共享进程的内存。
“同时”执行是人的感觉,在线程之间实际上轮换执行
总的来讲,主要涉及三个点
-
Thread
类 -
Runnable
接口 -
run()
方法 和start()
方法
- 所有在线程要做的事,即线程体,都写在
run()
方法里面,等待调用,这部分往往处理网络通信和数据库处理。 -
start()
的使用是开始线程的标志。也是线程的生命周期开始的地方。无论用前面的那种方式使用线程。
举例使用线程
使用Runnable实现
/**
* 实现Runnable接口的类
*/
public class DoSomething implements Runnable {
private String name;
public DoSomething(String name) {
this.name = name;
}
public void run() {
for (int i = 0; i < 5; i++) {
for (long k = 0; k < 100000000; k++) ;
System.out.println(name + ": " + i);
}
}
}
/**
* 测试Runnable类实现的多线程程序
*/
public class TestRunnable {
public static void main(String[] args) {
DoSomething ds1 = new DoSomething("阿三");
DoSomething ds2 = new DoSomething("李四");
Thread t1 = new Thread(ds1);
Thread t2 = new Thread(ds2);
t1.start();
t2.start();
}
}
使用Thread类实现:
/**
* 测试扩展Thread类实现的多线程程序
*/
public class TestThread extends Thread{
public TestThread(String name) {
super(name);
}
public void run() {
for(int i = 0;i<5;i++){
for(long k= 0; k <100000000;k++);
System.out.println(this.getName()+" :"+i);
}
}
public static void main(String[] args) {
Thread t1 = new TestThread("阿三");
Thread t2 = new TestThread("李四");
t1.start();
t2.start();
}
}
在整个Java线程中,实现并不是最难的,相反,线程有要注意的几个难点:
- 线程的生命周期
- 线程的优先级与线程调度
- 线程同步