多线程

每个进程都有独立的方法区和堆空间
每个线程都有自己独立的栈和独立的程序计数器,每个线程一份
一个进程当中里的多个线程可以共享进程当中的堆和方法区,使得线程之间的通信变得更高效。

多个线程,共享同一个进程中的方法区和堆

线程就是一个程序内部的一条执行路径
进程就是一个正在运行的程序,一个进程可以包含多个线程。

创建线程的方法:继承thread类,实现runnable接口

新建:thread对象被创建时就叫新建。
就绪:新建的线程被start()调用
运行:被cpu分配资源线程就执行了。
阻塞:
死亡:运行完或者被强制停止。stop(强制停止)

在java当中,通过同步机制,来解决线程的安全问题
方式1:同步代码块:synchronized( ) {
//需要被同步的代码,通过这样解决线程安全问题,
可能出现线程安全的代码,操作共享数据的代码,即需要被同步的代码
同步锁,任何对象都可以充当一个锁。 要求多个线程公用同一个吧锁
}
方式2:同步方法

同步原理:线程有锁才能去执行,无锁不能执行

创建线程的4种方式:
继承thread类
实现runnable接口
实现Callable接口
使用线程池创建
线程池好处:如果是自己创建线程那就要去创建和销毁,比较浪费资源,
线程池就是能提前创建多个线程,放到线程池中,将创建好的线程重复利用,避免了重复去创建和销毁线程的过程。

 String:
 如果是直接通过字面量给一个String赋值,此时的字符串值是声明在字符串常量池中,
 字符串常量池中是不会存储相同内容的字符串的。

4种线程池:
newsingleThreadPoolExecutor
创建一个单线程的线程池,这个线程池只有一个线程在工作,一个单线程执行所有的任务,如果这个线程因为异常结束,就会创建一个新的线程来代替

newFixedThreadPool
创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大就会保持不变,如果某个线程因为异常而结束,那么线程池会补充一个线程池。

newCachedThreadPool
创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,它就会回收掉空闲的线程(60秒不执行任务),当任务数增加时,线程池就又会添加一些新线程来处理任务,

newScheduledThreadPool
创建一个大小无线的线程池

java种waitt和sleep方法额不同
wait会释放锁,而sleep会一直持有锁

notify和notfyall的区别

什么是threadLocal变量
每个线程都有一个threadLocal就是每个线程都拥有自己独立的一个变量,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值