什么是线程(Thread)
线程 本身与编程语言没有任何关系,而是与计算机结构中的CPU有关。
我们经常听到,老王的电脑是8核CPU,牛X的不要不要的。
那么,老王的CPU支持多少线程呢? long long ago ,CPU的核心线程比是1:1,
我们吃的花生油一样。后来INTEL提出了多线程技术,将CPU核心数与线程数的
比例提升到了 1:2 。现在我们用的电脑大多数都是按照1:2的核心线程比来的。
线程是CPU调度的最小单位
8核CPU具备16线程数,也就是说某一时刻运行在该CPU的线程数量最大是16枚。
每一个被CPU宠幸的线程将在CPU上停留一段时间,愉快的搞事情,一旦时间到了
那么该线程将送回自己宫里去
线程在CPU中运行的时间
被宠幸的线程,将在一个CPU时间片上完成所有花样。在规定的时间内
没有完成想表现的动作,也只能是含恨离开,下次再说
关于CPU时间片的长短,取决于操作系统的规定。
线程从哪里产生
在操作系统中会为每一个运行的应用程序分配一个进程,在进程里包含了该应用程序运
行时所需要的各种资源。
应用程序的进程至少包含了一个线程,否则CPU也无法宠幸(调度)它。因为上边已经说
过,线程才是CPU玩弄的对象。
那么,线程是由应用程序进程所产生的,它通过抢占CPU时间片来使用CPU资源完成
自己要做的事情。
JAVA应用程序如何产生线程
Thread类
A thread is a thread of execution in a program. The Java
Virtual Machine allows an application to have multiple threads of
execution running concurrently.
这一段是摘自Thread类的开头注释,它表明Thread类是在一个程序内,
在JVM主线程里开辟独立线程的方式,最终达到多线程的运行效果
三种产生线程的方式
直接实例化Thread类并运行它:
// 这样就启动了一个什么不做的线程
Thread thread = new Thread() ;
thread.start();
//覆写Thread的RUN方法,在里面做一些我们想做的事情
Thread thread = new Thread(){
@Override
public void run() {
System.out.println(getName());
}
} ;
thread.start();
通过Runnable接口启动线程:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
//实现Runnable接口方法来搞事情
System.out.println(Thread.currentThread().getName());
}
});
thread.start();
通过Callable接口启动线程:
//实现Callable接口并把它包装成Runnable接口实现类
FutureTask futureTask = new FutureTask(new Callable<String>() {
@Override
public String call() throws Exception {
return "run with CallBack and Result is callBackResult";
}
});
//包装成线程并启动
Thread callBalcThread = new Thread(futureTask) ;
callBalcThread.start();
//使用包装类获取Callable执行call()后的返回值 【阻塞】
System.out.println(futureTask.get());