线程的概念
线程(英语:thread)是操作系统能够进行运算调度的最小单位。(百度百科)
可以理解为一个项目中的一个小的任务,在调度层面上,任务不能再分。
多线程的概念
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。(百度百科)
个人一些理解
关于多线程技术,现在用处最多的可能不是用于多个CPU或GPU计算同一个任务(话说这个应该叫并行计算吧,与多线程还是有些区别),更重要的是计算密集型任务和非计算密集型任务的同时处理,从而提高任务总体的处理速度。对于单个CPU而言,并不存在“同时”计算这一概念,看上去同时计算是因为在不同线程之间快速切换的结果,但线程之间切换也是要耗费时间的,所以对单纯的计算密集型任务进行多线程处理不会提高速度,反而会使速度降低。
Java中Thread的创建
Java中,多线程的使用大致有两种方式,一个是用Thread类来进行扩展,二是继承Runnable(不知道为什么java里接口不用I开头)进行实现,两者底层实现没有区别,基本就是Java中类和接口的区别,由于Java中不能继承多个父类,但能同时继承多个接口,推荐使用Runnable接口进行实现(面试题常考,但是其实并没有多复杂)。
继承Thread的线程类:
public class Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread thread = new MyThread();
thread.run();
}
public static class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
}
}
}
实现Runable的线程类:
public class Application {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread thread = new MyThread();
thread.run();
}
public static class MyThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
}
}
}
当然也有不使用新类的方法,不过不推荐,代码看着乱,而且不能复用。