引
如果对什么是线程、什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内。
用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。
很多人都对其中的一些概念不够明确,如同步、并发等等,让我们先建立一个数据字典,以免产生误会。
- 多线程:指的是这个程序(一个进程)运行时产生了不止一个线程
- 并行与并发:
- 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。
- 并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。
创建一个线程
Java 提供了三种创建线程的方法:
- 通过实现 Runnable 接口;
- 通过继承 Thread 类本身;
- 通过 Callable 和 Future 创建线程。
process 进程, Thread 线程
应用:
方法1
public class testXianCheng extends Thread{
@Override
public void run() {
for (int i = 0; i < 340; i++) {
System.out.println("我在听歌"+i);
}
}
public static void main(String[] args) {
new testXianCheng().start();
for (int i = 0; i < 3000; i++) {
System.out.println("我在玩游戏"+i);
}
}
}
方法2 实现Runnable 接口比较好,避免了单继承的局限性
public class testXianCheng2 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 300; i++) {
System.out.println("我在学习呢"+i);
}
}
public static void main(String[] args) {
new Thread(new testXianCheng2()).start();
for (int i = 0; i < 1300; i++) {
System.out.println("该睡觉了!!!"+i);
}
}
}