进程 : 进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
线程 : 线程是进程中的一个执行单元(执行路径),负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
线程是程序执行流的最小单
每一个线程都有自己的执行空间
在java中进行线程调度的程序为线程调度器.
线程的优先级程度为1-10,默认的优先级为5, 我们可以改变线程的优先级对线程调度产生影响,但是不能保证线程优先级高的就一定会执行
新建状态、就绪状态、运行状态、阻塞状态及死亡状态为线程的五种状态
启动线程的时候需要使用的方法是start() 不能直接调用run()方法
主要方法
- start() 启动线程
- Thread.currentThread() 获取当前线程
- getName() 获取线程名字
- Thread.sleep(long m) 让当前线程停止m毫秒
示例
public class ThreadDemo extends Thread {
public static void main(String[] args) {
ThreadDemo demo = new ThreadDemo();
demo.start(); // 需要启用start() 并不是直接调用run方法
for (int i = 0; i < 5000; i++) {
System.out.println("you are ok");
}
}
@Override
public void run() {
for (int i = 0; i < 5000; i++) {
System.out.println("Thread ");
}
}
}
Runnable接口中只设定了一个run()方法,所以要启用线程需要new 一个Thread 然后再其构造方法内传递Runnable
因为单继承多实现的原则,避免了单继承的局限性,继承接口的实现了线程对象和线程任务的分离,有利于解耦
示例
```
public class RunnableDemo implements Runnable {
public static void main(String[] args) {
RunnableDemo demo = new RunnableDemo();
Thread th = new Thread(demo);
th.start();
}
@Override
public void run() {
for (int i = 1; i < 2000; i++) {
System.out.println(1);
}
}
}
```
示例
```
new Thread(){
public void run(){
System.out.println("run1");
}
}.start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("run2");
}
}).start();
```
开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创建线程对象所带来的性能开销,节省了系统的资源。
示例
ExecutorService pool = Executors.newFixedThreadPool(2);
submit() 传递的为线程类
Future<String> future = pool.submit(new ThreadCallback(5));
Future<String> future2 = pool.submit(new ThreadCallback(50));
System.out.println(future.get());
System.out.println(future2.get());