线程初级相关问题

进程

程序都是静止的 只有程序真正运行起来 才成进程
程序中的一个顺序控制流程 ,同时也是CPU的基本调度单位 。 进程是由多个线程组成 , 彼此间完成不同的工作 交替执行 称为 多线程

一 线程的组成

1)CPU 时间片: 操作系统OS为每个线程分配执行的时间
2) 运行数据 :
堆空间: 存储线程需要的使用的对象 多线程共享堆空间对象
栈空间 存储线程需要的局部变量 每个线程独立的栈
2) 逻辑代码 ;

二 线程创建

1继承Thread 2 覆盖run 方法 3 创建 对象 4 调用 static方法
Implement Runable
1 实现线程任务类接口 2 覆盖方法 3创建线程类对象 4 将次类放进线程的类里面 5调用static方法*(由虚拟接调用run方法)
在这里插入图片描述

三 线程状态(6种

(JDK5 之后 就绪和运行状态统一交Runnable)

初始状态 (线程对象呗创建,只在堆中开辟内存 ,与常规对象无异)

就绪状态 (调用static之后 进入就绪状态 等待os选择分配时间片)
运行状态(获得时间片之后 进入运行状态 如果时间片到期 就回到就绪状态)

(等待状态 wait 有期限等待 如果等待时间到了就会回到就绪状态竞争时间片)

(无限期等待 join 无限期等待 等插队结束完 去回到就绪状态竞争时间片)

(阻塞状态 当加锁操作完成时候还回时间片 是会回到就绪状态 )

终止状态(Terminated)(主线程main()或独立线程run()结束进入终止状态 并释放所有时间片)

四 常用方法

1 休眠
静态方法 直接类名.sleep(毫秒)
注意{1 sleep写在那个线城 那个线程休眠了
2 sleep 写在run方法里 要去捕获他

}
2 放弃 public static void yeild()
的当前线程主动放弃时间片 等待下一次竞争
3 public final void join()
注意{
需要异常处理

五 线程不安全

当多线程并发访问临界资源时(堆中共享对象) , 如果破坏院子操作(从操作开始到操作结束),可能会造成数据不一致
临界资源:共享资源(同一对象) 一次仅允许一个线程使用 才能保证正确性
原子操作 :不可分割的多部操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的初级并发问题主要涉及多线程编程。下面是一些常见的初级并发问题及其解决方法: 1. 竞态条件(Race Condition):当多个线程同时访问和修改共享数据时,可能导致意外的结果。解决方法包括使用锁(synchronized关键字或ReentrantLock类)来保护共享数据的访问,或者使用线程安全的数据结构。 2. 死锁(Deadlock):当多个线程互相等待对方释放资源时,导致程序无法继续执行。为避免死锁,可以使用避免循环等待、按顺序获取锁、设置超时时间等策略。 3. 内存可见性(Memory Visibility):当一个线程修改了共享变量的值,其他线程可能无法立即看到最新的值。可以使用volatile关键字来保证变量的可见性,或者使用synchronized关键字或Lock对象来确保线程间的通信。 4. 并发集合的安全性:Java提供了一些线程安全的集合类,如ConcurrentHashMap和CopyOnWriteArrayList。使用这些类可以在多线程环境下安全地进行集合操作。 5. 线程调度与同步:在多线程编程中,需要合理地控制线程的调度和同步。可以使用wait()和notify()等方法实现线程之间的等待和通知机制,或者使用CountDownLatch和CyclicBarrier等同步工具类。 需要注意的是,并发编程是一项复杂的任务,需要谨慎处理。合理地设计和管理线程,以及正确地使用同步机制,能够提高程序的并发性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值