Java多线程详解(四)------复习
2021-03-27 09:26
标签:今天 pack 对象 匿名内部类 rtu notify xtend override 条件 1、线程状态 A thread in the waiting state is waiting for another thread to
* perform a particular action.
*
* For example, a thread that has called Object.wait()
* on an object is waiting for another thread to call
* Object.notify() or Object.notifyAll() on
* that object. A thread that has called Thread.join()
* is waiting for a specified thread to terminate.
2、wait/sleep的区别 wait/sleep 3、什么是并发?什么是并行? 并发:同一时刻多个线程在访问同一个资源,多个线程对一个点 4、什么是锁 锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。 5、创建线程的方式 1)继承Thread类 2)实现Runnable接口 3)用匿名内部类方式 总结:上诉3种方式中,1和2都要new对象出来(浪费内存),3是直接new接口,推荐使用第3种方式。 Java多线程详解(四)------复习 标签:今天 pack 对象 匿名内部类 rtu notify xtend override 条件 原文地址:https://www.cnblogs.com/zsy-code/p/13662426.htmlThread.State
public enum State {
/**
* Thread state for a thread which has not yet started.
*/
NEW,(新建)
/**
* Thread state for a runnable thread. A thread in the runnable
* state is executing in the Java virtual machine but it may
* be waiting for other resources from the operating system
* such as processor.
*/
RUNNABLE,(准备就绪)
/**
* Thread state for a thread blocked waiting for a monitor lock.
* A thread in the blocked state is waiting for a monitor lock
* to enter a synchronized block/method or
* reenter a synchronized block/method after calling
* {@link Object#wait() Object.wait}.
*/
BLOCKED,(阻塞)
/**
* Thread state for a waiting thread.
* A thread is in the waiting state due to calling one of the
* following methods:
*
*
@link Object#wait() Object.wait} with no timeout
*
*
@link #sleep Thread.sleep}
*
功能都是当前线程暂停,有什么区别?
wait放开手去睡,放开手里的锁
sleep握紧手去睡,醒了手里还有锁
例子:小米9今天上午10点,限量抢购
春运抢票
电商秒杀...
并行:多项工作一起执行,之后再汇总
例子:泡方便面,电水壶烧水,一边撕调料倒入桶中 1 class X {
2 private final ReentrantLock lock = new ReentrantLock();
3 // ...
4
5 public void m() {
6 lock.lock(); // block until condition holds
7 try {
8 // ... method body
9 } finally {
10 lock.unlock()
11 }
12 }
13 }
14
15
16 synchronized与Lock的区别
17
18 两者区别:
19 1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;
20 2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;
21 3.synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;
22 4.用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
23 5.synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)
24 6.Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。
1 package com.study.thread;
2
3 public class ThreadTest {
4 public static void main(String[] args) {
5 for(int i=0;i){
6 //继承Thread类,覆写run()方法,创建多线程
7 ThreadDemo t = new ThreadDemo();
8 t.start();
9 }
10
11 }
12 }
13 class ThreadDemo extends Thread{
14 @Override
15 public void run(){
16 System.out.println("hello world");
17 }
18 }
1 package com.study.thread;
2
3 public class ThreadTest {
4 public static void main(String[] args) {
5 for (int i = 0; i ) {
6 //继承Thread类,覆写run()方法,创建多线程
7 // ThreadDemo t = new ThreadDemo();
8 // t.start();
9 Thread t = new Thread(new RunnableDemo());
10 t.start();
11 }
12
13 }
14 }
15
16 class ThreadDemo extends Thread {
17 @Override
18 public void run() {
19 System.out.println("hello world");
20 }
21 }
22
23 class RunnableDemo implements Runnable {
24
25 @Override
26 public void run() {
27 System.out.println("hello Runnable");
28 }
29 }
1 public class ThreadTest {
2 public static void main(String[] args) {
3 for (int i = 0; i ) {
4 //继承Thread类,覆写run()方法,创建多线程
5 // ThreadDemo t = new ThreadDemo();
6 // t.start();
7 // Thread t = new Thread(new RunnableDemo());
8 // t.start();
9 new Thread(new Runnable() {
10 @Override
11 public void run() {
12 System.out.println("hello 匿名内部类");
13 }
14 }).start();
15 }
16
17 }
18 }
文章标题:Java多线程详解(四)------复习
文章链接:http://soscw.com/index.php/essay/68515.html