JUC并发编程(1)

1、什么是JUC

源码+官方文档

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qBAIB5KN-1614492990596)(JUC并发编程.assets/image-20201018191324143.png)]

java.util 工具包

2、线程和进程

进程:一个程序,QQ.exe , Music.exe程序的集合;

一个进程往往可以包含多个线程,至少包含一个

java默认有2个线程:main线程和gc线程

线程:开了一个进程Typora,写字,自动保存(线程负责的)

对于java而言:Thread , Runnable , Callable

java真的可以开启线程吗?开不了

public synchronized void start() {
        /**
         * This method is not invoked for the main method thread or "system"
         * group threads created/set up by the VM. Any new functionality added
         * to this method in the future may have to also be added to the VM.
         *
         * A zero status value corresponds to state "NEW".
         */
        if (threadStatus != 0)
            throw new IllegalThreadStateException();

        /* Notify the group that this thread is about to be started
         * so that it can be added to the group's list of threads
         * and the group's unstarted count can be decremented. */
        group.add(this);

        boolean started = false;
        try {
            start0();
            started = true;
        } finally {
            try {
                if (!started) {
                    group.threadStartFailed(this);
                }
            } catch (Throwable ignore) {
                /* do nothing. If start0 threw a Throwable then
                  it will be passed up the call stack */
            }
        }
    }
	//本地方法,底层的c++,java无法直接操作硬件
    private native void start0();

并发,并行

并发编程:并发、并行

并发(多线程操作同一个资源)

  • CPU一核,模拟出来多条线程,快速交替

并行(多个人一起行走)

  • CPU多核,多个线程可以同时执行、线程池
public class Test01 {

    public static void main(String[] args) {
        //获取cpu的核数
        //cpu密集型,IO密集型
        System.out.println(Runtime.getRuntime().availableProcessors());

    }

}

并发编程的本质:充分利用CPU的资源

线程有几个状态

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:
         * <ul>
         *   <li>{@link Object#wait() Object.wait} with no timeout</li>
         *   <li>{@link #join() Thread.join} with no timeout</li>
         *   <li>{@link LockSupport#park() LockSupport.park}</li>
         * </ul>
         *
         * <p>A thread in the waiting state is waiting for another thread to
         * perform a particular action.
         *
         * For example, a thread that has called <tt>Object.wait()</tt>
         * on an object is waiting for another thread to call
         * <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
         * that object. A thread that has called <tt>Thread.join()</tt>
         * is waiting for a specified thread to terminate.
         */
    	//等待,死死的等
        WAITING,

        /**
         * Thread state for a waiting thread with a specified waiting time.
         * A thread is in the timed waiting state due to calling one of
         * the following methods with a specified positive waiting time:
         * <ul>
         *   <li>{@link #sleep Thread.sleep}</li>
         *   <li>{@link Object#wait(long) Object.wait} with timeout</li>
         *   <li>{@link #join(long) Thread.join} with timeout</li>
         *   <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
         *   <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
         * </ul>
         */
    	//超时等待
        TIMED_WAITING,

        /**
         * Thread state for a terminated thread.
         * The thread has completed execution.
         */
    	//终止
        TERMINATED;
}

wait/sleep区别

  • 来自不同的类

    • wait–>Object
    • sleep–>Thread
  • 关于锁的释放

    • wait会释放锁
    • sleep不会释放
  • 使用的范围是不同的

    • wait必须在同步代码块中
    • sleep可以在任何地方使用
上一篇:线程面试必备:线程状态和dump输出状态,文末抽奖!


下一篇:进程同步与互斥——理发师问题(实现OS上的伪代码)