关于多线程
***关于多线程的基本理解***
1:首先我们得理解任务,线程,cpu之前的关系?~
2:任务就是我们执行当前想法,线程就是这个需求的执行过程,cpu就是去执行这个线程。~
3:现在是有多个任务,多个线程,需要cpu去执行,怎么去处理?如果是程序中是单线程,那么多个线程过来得排队,这样影响执行效率,在业务需求没有多的关联关系,我们可以使用多线程。~
4:解决办法,线程池,多个任务在线程池外等候,当实例了一个线程池,在线程池调度中心,可以接受外部等候的线程过来执行,执行之前线程池中的线程是阻塞的,在调度中心外部某个任务和线程池中线程有对应关系后,这个线程就去执行这个任务,这个时候有多个线程,多个任务,就可以实现多线程对多任务同时处理,实现多线程。
那我们是不是觉得线程池中的线程越多越好呢?
显然不是的,我们程序的执行都是在jvm中开辟一道内存空间,而我们这个内容空间是存在某在一个服务器或者pc机上,是我们本身的资源,资源越多速度肯定会慢下来,而且我们在实例化一个线程池之后,jvm开辟的内存空间就确定了,显然线程池里面的运输线程越多不一定越好。
多线程状态下cpu是怎么执行的?
在多线程状态下,cpu执行是随机的,它不单独执行哪个线程先执行,当我们在代码中由上而下.start()时,其执行也不是我们程序的执行顺序,而是cpu随机启用执行的,在使用多线程技术时,多线程的运行结果和多线程的执行顺序或者调用顺序是无关的。
***线程的基本概念、线程的基本状态及状态之间的关系***
线程,有时称为轻量级进程,是CPU使用的基本单元;它由线程ID、程序计数器、寄存器集合和堆栈组成。它与属于同一进程的其他线程共享其代码段、 数据段和其他操作系统资源(如打开文件和信号)。
线程有四种状态:新生状态、可运行状态、被阻塞状态、死亡状态。~
***什么是线程,线程和进程的区别是什么***
~
线程,程序执行流的最小执行单位,是行程中的实际运作单位,经常容易和进程这个概念混淆。那么,线程和进程究竟有什么区别呢?首先,进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程,而线程,是运行中的实际的任务执行者。可以说,进程中包含了多个可以同时运行的线程。
1.锁定实例~
```java
public class SynchronizeDemo {
public void doSth1() {
/**
* 锁对象实例 synchronizeDemo
*/
synchronized (synchronizeDemo){
try {
System.out.println("正在执行方法");
Thread.sleep(10000);
System.out.println("正在退出方法");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}~
public void doSth2() {
/**
* 锁对象实例 this 等同于 synchronizeDemo
*/
synchronized (this){
try {
System.out.println("正在执行方法");
Thread.sleep(10000);
System.out.println("正在退出方法");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}