Java多线程系列详解_02_Thread API

Thread类的构造方法

// NoArgsConstructor
Thread()
//传入Runnable实例
Thread(Runnable target)
//传入Runnable实例和线程名称
Thread(Runnable target, String name)
//传入线程名称
Thread(String name)
//传入线程组名称和Runnable实例
Thread(ThreadGroup group, Runnable target)
//传入线程组名称和Runnable实例和线程名称
Thread(ThreadGroup group, Runnable target, String name)
//传入线程组名称和Runnable实例和线程名称和指定的堆栈大小
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
//传入线程组名称和线程名称
Thread(ThreadGroup group, String name)

接下来依次分析构造方法,浏览源码寻找关键信息
在这里插入图片描述
图2-1在这里插入图片描述
图2-2
在这里插入图片描述
图2-3
在这里插入图片描述
图2-4

在这里插入图片描述
图2-5

  1. init()方法会调用重载方法( 图2-2)
  2. 如果不传入线程组会默认使用parent的线程组( 图2-3)
  3. 如果不传入线程名称会默认使用"Thread-" + nextThreadNum()( 图2-1和2-4)
  4. 如果不传入Runnable实例会默认不执行方法(图2-5)
  5. 如果不传入stackSize,默认大小是0(图2-1)

Thread类的常用方法

// 创建线程供后面Api使用
Thread thread = new Thread(()->readFromDataBase());
// 使当前线程休眠
Thread.sleep(long millis) throw InterruptedException
// 守护线程:个人理解,例如当建立一个长连接进行心跳检测时,可以将测试心跳的程序置位守护线程,
// 因为在主程序结束之之后,判断心跳不是必要的,也就是当主线程结束之后,守护线程会跟着结束
thread.setDaemon(Boolean b)
// 判断是否为守护线程
thread.isDaemon()
// 设置线程的优先级(Max = 10 , Min = 1)
// 注意设置优先级只是建议程序去优先或延后执行,程序并不一定会根据优先级去执行
thread.setPriority(int i);
// join等待结束方法,意思就是等待线程结束
thread.join()
// interrupt打断方法,必须在捕获到InterruptedException异常是才会打断程序
thread.interrupt()
//stop 停止方法 这个方法是过时的,JDK官方建议不使用,如果需要停止线程,需要使用interrupt()方法
thread.stop()

多线程常见面试题

  1. voliate关键字:使用这个关键字修饰之后 , 多个线程运行期间会相互可见
  2. 锁:synchronized可以加再方法上, 也可以作为代码块使用,加在方法上的时候会存在this锁,
    其实使用synchronized修饰方法和 synchronized(this){} 代码块的作用是一样的,
    这个锁的作用是使程序单通道执行!
  3. sleep() 和wait()区别
    1- 它们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁.
    2- sleep()是Thread类的方法,而wait()则是Object的方法.
    3- sleep(milliseconds)可以用时间指定来使他自动醒过来,如果想要唤起只能使用interrupt()打断
    而wait()想要被唤起,可以使用notify()或者notifyAll()方法唤醒
    4- sleep()必须捕获异常,而wait(),notify()和notifyAll()不需要捕获异常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章