
博客地址:
本系列文章将主要解释JAVA的一些基本知识点,并对其进行概括以作一般归纳. 无论是JAVA开发新手还是行业资深人士,他们都希望为大多数同行带来帮助. 如有任何疑问,请留言或及时添加QQ: 243042162.
消息:
近来,习近平大力推动了“不忘初衷,怀念使命”主题教育,提出了“保持初衷,担负使命,发现差距,抓落实”的总体要求. ,这也恰好反映了我们的个人生活和工作. 人们是中年人,其中大多数人都很懒惰,缺乏学生时代的初衷,无论您年龄多大,都应摆脱借口,保持正确的态度多线程避免死锁,以家庭为生,以未来为生前景,并实施技术升级和家庭教育,让自己一生有质的飞跃.
1. 进程和线程

进程: 具有一定独立功能的程序,与某个数据集上的运行活动有关,进程是系统进行资源分配和调度的独立单元.
线程: 进程的实体是CPU调度和分配的基本单元. 它是一个基本单元,比流程小,可以独立运行. 线程本身基本上没有系统资源,只有少量在操作中必不可少的资源(例如程序计数器,一组寄存器和堆栈),但是它可以与其他线程共享该进程拥有的所有资源. 属于同一进程的线程.
区别: 进程是一个正在执行的应用程序,而线程是该进程内的执行序列. 一个进程可以有多个线程. 线程也称为轻量级进程.
a. 创建线程的几种方法
(1)继承线程

(2)实现Runnable接口
(3)应用程序可以使用Executor框架创建线程池
b. 线程的几种状态(早上打车去上班)
(1)新建(准备呼叫蜂鸣)
(2)可操作(找到一辆可以带您上班的汽车)

(3)跑步(驾驶员接您并带您上班)
(4)阻止(交通堵塞): 等待阻止等待多线程避免死锁,同步阻止,同步锁定,其他阻止-
Thread.sleep(长毫秒)或t.join()方法
(5)死亡(我到达公司并付钱下车)
c. 同步方法和同步代码块

默认情况下,同步方法将此对象或当前类对象用作锁;
同步代码块可以选择锁定,这比同步方法更精细. 我们可以选择仅同步会导致同步问题的部分代码,而不是整个方法.
/**
* 死锁实例
* t1先运行,这个时候flag==true,先锁定obj1,然后睡眠1秒钟
* 而t1在睡眠的时候,另一个线程t2启动,flag==false,先锁定obj2,然后也睡眠1秒钟
* t1睡眠结束后需要锁定obj2才能继续执行,而此时obj2已被t2锁定
* t2睡眠结束后需要锁定obj1才能继续执行,而此时obj1已被t1锁定
* t1、t2相互等待,都需要得到对方锁定的资源才能继续执行,从而死锁。
*/
class DeadLock implements Runnable{
private static Object obj1 = new Object();
private static Object obj2 = new Object();
private boolean flag;
public DeadLock(boolean flag){
this.flag = flag;
}
@Override
public void run(){
System.out.println(Thread.currentThread().getName() + "运行");
if(flag){
synchronized(obj1){
System.out.println(Thread.currentThread().getName() + "已经锁住obj1");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(obj2){
// 执行不到这里
System.out.println("1秒钟后,"+Thread.currentThread().getName()
+ "锁住obj2");
}
}
}else{
synchronized(obj2){
System.out.println(Thread.currentThread().getName() + "已经锁住obj2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized(obj1){
// 执行不到这里
System.out.println("1秒钟后,"+Thread.currentThread().getName()
+ "锁住obj1");
}
}
}
}
}
public class LockDemo {
public static void main(String[] args) {
Thread t1 = new Thread(new DeadLock(true), "线程1");
Thread t2 = new Thread(new DeadLock(false), "线程2");
t1.start();
t2.start();
}
}
运行结果
线程2运行
线程1运行
线程1已经锁住obj1
线程2已经锁住obj2
将
Thread t2 = new Thread(new DeadLock(false), "线程2");
更改为
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-195304-1.html
人家进了12海里距离