网站怎么更改后台登陆密码,网页创建基本步骤,上海金融网站制作网站制作公司好,衡阳公司做网站1.什么是线程#xff1f;
线程是操作系统能够进行运算调度的最小单位#xff0c;它被包含在进程之中#xff0c;是进程中的实际运作单位。
2.线程和进程有什么区别#xff1f;
线程是进程的子集#xff0c;一个进程可以有很多线程#xff0c;每条线程并行执行不同的任…1.什么是线程
线程是操作系统能够进行运算调度的最小单位它被包含在进程之中是进程中的实际运作单位。
2.线程和进程有什么区别
线程是进程的子集一个进程可以有很多线程每条线程并行执行不同的任务。不同的进程使用不同的内存空间而所有的线程共享一片相同的内存空间。
3.如何在Java中实现线程
一共有三种方式
1.继承Thread类
2.实现Runnable接口重写run方法
2.实现Callable接口重写call方法(可以返回值和抛出异常)
用Runnable还是Thread
在java中不支持多继承支持多实现如果该类需要继承其它类则选择Runnable;
5.Thread 类中的start() 和 run() 方法有什么区别
start()方法被用来启动新创建的线程使进程就绪状态而run()方法 执行线程使线程进入运行状态。
6.线程的几种状态
1、新建状态(New)新创建了一个线程对象。
2、就绪状态(Runnable)线程对象创建后其他线程调用了该对象的start()方法。该状态的线程位于“可运行线程池”中变得可运行只等待获取CPU的使用权。即在就绪状态的进程除CPU之外其它的运行所需资源都已全部获得。
3、运行状态(Running)就绪状态的线程获取了CPU执行程序代码。
4、阻塞状态(Blocked)阻塞状态是线程因为某种原因放弃CPU使用权暂时停止运行。直到线程进入就绪状态才有机会转到运行状态。
阻塞的情况分三种
(1)、等待阻塞运行的线程执行wait()方法该线程会释放占用的所有资源JVM会把该线程放入“等待池”中。进入这个状态后是不能自动唤醒的必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒
(2)、同步阻塞运行的线程在获取对象的同步锁时若该同步锁被别的线程占用则JVM会把该线程放入“锁池”中。
(3)、其他阻塞运行的线程执行sleep()或join()方法或者发出了I/O请求时JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时线程重新转入就绪状态。
5、死亡状态(Dead)线程执行完了或者因异常退出了run()方法该线程结束生命周期。
7.线程同步的几种方法
1.synchronized关键字修饰语句块或者修饰方法
2.volatile关键字修饰变量
3.使用重入锁Lock
ReentrantLock类是可重入、互斥、实现了Lock接口的锁 它与使用synchronized方法和快具有相同的基本行为和语义并且扩展了其能力
ReenreantLock类的常用方法有
ReentrantLock() : 创建一个ReentrantLock实例 lock() : 获得锁 unlock() : 释放锁 注ReentrantLock()还有一个可以创建公平锁的构造方法但由于能大幅度降低程序运行效率不推荐使用
4.使用线程本地变量 ThreadLocal
5.使用阻塞队列实现线程同步(java.util.concurrent包中提供的类)
8.volatile与synchronized的区别
1volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住. 2volatile仅能使用在变量级别,synchronized则可以使用在变量,方法. 3volatile仅能实现变量的修改可见性,而synchronized则可以保证变量的修改可见性和原子性.
4volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.
9.终止线程的3中方式
1.线程正常执行完毕正常退出。
2.使用while()循环在特定条件下退出。
3.使用interrupt方法终止线程。
10.什么是线程池 为什么要使用它
创建线程要花费昂贵的资源和时间如果任务来了才创建线程那么响应时间会变长而且一个进程能创建的线程数有限。为了避免这些问题在程序启动的时候就创建若干线程来响应处理它们被称为线程池里面的线程叫工作线程。如果并发的线程数量很多并且每个线程都是执行一个时间很短的任务就结束了这样频繁创建线程就会大大降低系统的效率因为频繁创建线程和销毁线程需要时间。线程池使得线程可以复用就是执行完一个任务并不被销毁而是可以继续执行其他的任务。线程池主要作用是便于管理线程节约时间与资源。
11.线程死锁
两个或两个以上的线程争夺共享资源并各自不释放手中的资源而造成死锁。
解决办法1.让所有的线程按照一定的顺序获得一组锁2.将多个锁组成一组并放到一个锁里。
12.sleep()和wait()的区别
sleep()使线程暂停一段时间占用CUP资源没用释放锁
wait()使线程进入等待池中释放CPU资源释放锁