**JAVA线程基础**
1,程序是为完成特定任务 用某种语言编写的一组指令的集合。 简单的说就是我们写的代码
2.进程是指运行中的程序 比如我们使用QQ 就启动了一个进程 操作系统会为其分配内存空间
进程是程序的依次执行过程,或是正在运行的一个程序 是动态的过程 有它自身的产生存在和消亡过程。
3.线程是由进程创建的,是进程的一个实体一个进程可以拥有多个线程 例如 迅雷下载多个任务
单线程:同一时刻 只允许执行一个线程
多线程 同一时刻 可以执行多个线程 比如qq打开多个聊天窗口
4.并发 同一个时刻 多个任务交替执行,造成一种“貌似同时”的错觉 简单来说 单核cpu实现的多任务就是并发
5.并行 同一个时刻 多个任务同时进行 。 多核cpu可以实现并行
用java 代码查看自己点脑的cpu 个数
Runtime r =Runtime.getRuntime(); int cpu= r.availableProcessors(); //获取当前电脑的CPU个数 System.out.println(cpu);
线程的基本使用
创建线程的两种方法
1.继承Thread类 重写run方法( 一个类只能继承一个父类 所以有局限性)
当一个类继承了Thread 类 该类就可以当作线程使用
重写run方法 写自己的业务代码
run Thread类 实现了Runnable 接口的run 方法
当程序启动时 会调用主线程 当启动一个子线程后 主线程不会阻塞会继续执行 这时主线程和子线程交替执行
主线程结束不一定进程结束
t.start()启动线程 如果直接调用 run 方法 相当于时main 线程调用的run 方法 这样必须执行完程序才能往下进行运行
Thread.sleep(1000); 休眠 单位毫秒
Thread.currentThread().getName(); 获取线程名
2.实现Runnable 接口 重写 run方法
实现 run 接口 Runnable 没有start 方法 也不能直接调用 run方法
package Test;
public class d implements Runnable{
@Override
public void run() {
while(true)
{
System.out.println("祥哥好帅");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread.currentThread().getName();
}
}
}
package Test;
public class Test {
public static void main(String[] args) {
//创建一个 线程
// Thread01 t =new Thread01();
// //启动线程
// t.start();
d D=new d();
Thread t =new Thread(D);
t .start();
}
}
继承Thread 和 实现Runnable 的区别
1.从java 的设计来看 通过继承Thread 或者实现Runnable 接口来创建线程本质上没有区别 Thread 类本身就是西安了Runnable 接口
2.实现Runnable 接口方式更加适合多个线程共享一个资源的情况并且避免了单继承的限制



