Java 线程学习

线程的七状态转换图:

堵塞的情况分三种:

  (一)、等待堵塞:执行的线程执行wait()方法,JVM会把该线程放入等待池中。

  (二)、同步堵塞:执行的线程在获取对象的同步锁时,若该同步锁被别的线程占用。则JVM会把该线程放入锁池中。

  (三)、其它堵塞:执行的线程执行sleep()或join()方法,或者发出了I/O请求时。JVM会把该线程置为堵塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完成时。线程又一次转入就绪状态。

与课本中的七状态转换图相比,图中的可运行状态应该相当于活动就绪状态,其中的池锁状态活动阻塞状态,阻塞状态应该相当于静止就绪,处于静止就绪状态的程序是被挂起的,表示暂不接受调度。等待队列应该相当于静止阻塞,需要被外部程序唤起才能进入活动阻塞。

当进入运行状态后,会出现:

1.当线程调用了自身的sleep()方法或其他线程的join()方法,就会进入阻塞状态(该状态既停止当前线程,但并不释放所占有的资源)。当sleep()结束或join()结束后,该线程进入可运行状态,继续等待OS分配时间片。

join的意思是使得放弃当前线程的执行,并返回对应的线程,例如:程序在main线程中调用t1线程的join方法,则main线程放弃cpu控制权,并返回t1线程继续执行直到线程t1执行完毕。所以结果是t1线程执行完后,才到主线程执行,相当于在main线程中同步t1线程,t1执行完了,main线程才有执行的机会

join方法的原理就是调用相应线程的wait方法进行等待操作的,例如A线程中调用了B线程的join方法,则相当于在A线程中调用了B线程的wait方法,当B线程执行完(或者到达等待时间),B线程会自动调用自身的notifyAll方法唤醒A线程,从而达到同步的目的。

2.线程调用了yield()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;

3.当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchroniza(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的锁池里也许已经有了其他线程在等待获取锁标记,这时它们处于队列状态,既先到先得),一旦线程获得锁标记后,就转入可运行状态,等待OS分配CPU时间片;

 synchroniza 同步锁,保证一个临界资源同时只会被一个线程所访问。Synchronized的作用主要有三个:(1)确保线程互斥的访问同步代码(2)保证共享变量的修改能够及时可见(3)有效解决重排序问题

4.当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()或notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁 池,等待获取锁标记

线程创建方式:

1.继承Thread 类,重写run方法,创建的线程调用start方法启动

2.实现Runnable接口,重写run方法,通过new Thread(继承Runnable接口的实例).start方法启动。本方法的原理是:thread对象调用start方法,start方法导致线程的run方法被调用,在线程的run方法中去调用Runnable实例的run方法

3.实现Callable接口,重写call 方法,call 方法有返回值。通过newThread(new FutureTask<>(new 实现Callable 接口的类)).start方法启动。FutureTask<Integer>是一个包装器,它通过接受Callable<Integer>来创建,它同时实现了Future和Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。

4.通过线程池创建

线程关键字

synchronized :

1.能够针对临界资源进行加锁,保证一个临界资源同时只会被一个线程锁访问。防止一个临界资源同时被两个线程修改出现脏读。

2. 用法:

1.可以修饰代码块,被修饰的代码块称为同步语句块,作用对象是调用这个代码块的对象。

2.修饰一个方法,被修饰的方法称为同步方法,作用范围是整个方法,作用对象是调用这个方法的对象。

3.修饰一个静态方法,作用范围是整个静态方法,作用对象是这个类的所有对象。

4.修饰一个类,作用对象是整个类的所有对象。

Java线程常用关键字介绍

Synchronized 用法举例

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值