JavaSe基础10

本文介绍了Java中的进程和线程概念,包括线程的创建方式(Thread、Runnable、Callable),线程的API如sleep和join。还讨论了线程安全、单例模式、同步机制,并提到了线程池的使用和配置。此外,文章涵盖了网络编程的基础知识,如IP地址、端口、TCP与UDP协议,以及NIO的Channel。同时,枚举类、反射和XML的数据格式也在文中提及。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第十二章 进程

1、进程:一个程序的执行过程

2、线程:每一个进程至少包含一个线程

3、创建线程:

1 继承Thread类,需要重写Run方法,Run方法:当CPU开始执行这个线程时执行的方法,调用start方法使线程进入到准备状态

2 实现Runnable接口,需要重写start方法,执行时需要将实例化的对象放到Thread构造里然后执行Thread对象的start方法

3 实现callable接口,需要重写call()方法,相当于Run方法,不同点·:有返回值,能抛出异常,使用线程池执行

4、API:

1 睡眠:sleep(long):使当前线程睡眠指定毫秒

2 Thread(String):设置线程名

3 setPriority(1-10):设置线程优先级

4 join():让当前线程阻塞,等待调用的线程执行完成

5 setDaemon(boolen):当主线程结束,所有守护线程均结束

  • //1
    synchronized (lock){
    //代码锁,悲观锁
        lock: Buy.class , this,
        
    }
    //2
    Lock:需要使用ReentrantLock的子类,占用资源少
    * 如果多线程代码对公共资源进行修改,线程不安全
    Collections.synchronizedList():直接生成线程安全的集合
    
  • 单例模式

1 将所有构造方法私有化

2 定义一个私有的当前类的静态对象

3 定义一个公共的静态方法,在方法里返回创建好的静态实例

6 wait():使锁对象进入等待状态,等待状态时当前线程会阻塞

7 notify():可以唤醒进入等待状态的对象

8 当两个线程同时持有一把锁的时候,可以相互唤醒

  • 阻塞队列:

  • 构造需要指定队列长度

    put(Object):往队列里面存值,方法是阻塞的

take(Object):从队列里面取值,方法是阻塞的

5、线程池:无法启动Thread

1 execute:只能启动Runnable线程

2 shutdown():释放线程池,在线程池用完之后释放

3 ThreadPoolExecutor:

核心线程:常驻线程

最大线程:当任务队列满的时候如果再来任务,会启动临时线程,线程数量最大不能超过最大线程数

保持时间:临时线程的最大闲置时间

时间单位:TimeUnit.SECONDS的静态常量

任务队列:当任务队列满的时候,启动临时线程

CallerRunsPolicy():多出来的任务直接执行Run方法,这是run的任务是在主线程中执行

ThreadPoolExecutor threadPoolExecutor = 
    new ThreadPoolExecutor(
    2,
    5,
    1, 
    TimeUnit.SECONDS,
    arrayBlockingQueue = new ArrayBlockingQueue<>(5),
    //new ThreadPoolExecutor.AbortPolicy()	多出来的任务直接放弃,会抛出异常
    //new ThreadPoolExecutor.DiscardPolicy()	多出来的任务直接放弃,不会抛出异常
    //new ThreadPoolExecutor.CallerRunsPolicy());	
    	//调用任务的run()方法绕过线程池直接执行。
    	//注:明确线程池对多可执行的任务数 = 队列容量+最大线程数
	new ThreadPoolExecutor.DiscardOldestPolicy();	
    	//多出来的任务会进入队列,同时放弃等待时间最长的任务

6、可见性:全局属性在不同线程中默认是不可见的(如果这个变量没有运算操作,变量的变更在当前线程是不可见的)

1 volatile:被volatile修饰的变量是可见的

2 原子性:一个过程要么执行完,要么不执行

3 java中具备原子性的操作:赋值

4 解决原子性问题:

1 加锁:synchronized (MoneyThreadf.class)(悲观锁)

2 CAS算法:比较再替换

第十三章:网络编程

1、ip:

ip4地址:255.255.255.255----0.0.0.0

1 回环地址:1. 127.0.0.1 通过这个ip访问本机会走防火墙

2. 代表本机:localhast 不会走防火墙

2 局域网ip:192.168.0.0----192.168.255.255

2、端口:0----65535,0----1023:系统占用,1024----65535:普通用户,一个端口号只能被一个程序监听

2、协议:UDP分发协议,一般用于直播,视频会议等

TCP:连接分为三次握手,断开分为四次挥手

  • datagramPacket.getAddress().getHostAddress() //获取发送端ip
    

3、NIO:通过channel: 传输数据

ServerSocketChannel: configBlocking:设置阻塞模式,true阻塞,false非阻塞

4、HTTP协议:

1 链接组成

协议://域名:端口/资源路径?参数key=参数value&参数2key=参数2value&…

5、enum:枚举类

1 无法继承

2 可以实现接口

3 构造方法必须私有

4 主要用于定义数量有限的常量,方便多个类使用

6、核心加载器,扩展加载器,系统加载器
Class:
1 getFields:获取非私有化属性数组
2 getDeclaredFields:获取所有属性数组
3 getMethods:获取非私有化方法和父类的方法
4 getDeclaredMethods:获取私有化方法
5 getConstructors:获得构造方法
6 getDeclaredConstructors:获得私有化构造方法
7 getAnnotations:获取注解列表(方法上的注解使用方法类调用,类上的注解使用类对象调用,属性使用属性对象调用)
8 setAccessible(true):暴力反射

7、XML:

数据格式:

1 xml:主要用于本地数据格式(存储一些配置信息)

2 json:主要用于网络传输格式

3 XML:一定有根标签,每个标签必须有终结标签,标签嵌套时不可以错开,标签内部属性以空格做为分隔符

4 <?version encoding ?> 必须在第一行

5 <! > DTD约束

//示例:
<ROOT>

<A>

<AA attr=1 attr2=2>

<sizeMax>20G</sizeMax>

<threadMax>1000</threadMax>

</AA>

</A>

<B>

</B>

</ROOT>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值