实现多线程常用的有两个方法:
正则表达式匹配汉字:[u4E00-u9FA5]
1:继承Thread类
2:实现Runnable/Callable接口
相对而言,实现接口要相对比继承Thread类好,原因主要有2
1:继承了Thread类以后,就不能继承其他类,只能单继承,存在局限性
2:继承Thread类,不能用一个实例创建多个线程,但实现Runnable接口,该类的一个实例同时建立多个线程,Runnable接口适合资源共享
通过以上两个方式,都需要重写run()方法,run()方法体中的代码块就是这条线程需要执行的内容
在多线程中,常用的方法包括:
1:run()
【方法体中的代码块就是这条线程需要执行的内容】
2:start()
【启用线程】
3:getPriority() 【返回线程的优先级】
4:isAlive() 【测试线程是否还活着】
5:join() 【加入一个线程,直到该线程死亡】
6:sleep(long millis) 【线程休眠多少毫秒,进入阻塞状态】
7:yield() 【暂停当前正在执行的线程对象,并执行其他线程。让出这次执行的机会】
线程同步锁
1:直接在方法前面加修饰符:synchronized
2:synchronized (锁住的对象){同步代码块}
什么时候同步监视器释放加锁?
1:同步代码块或方法执行完成
2:在代码块中遇到break ,return跳出了代码块
3:执行同步代码块或同步方法时遇到了未捕获的异常
4:调用了同步监视器的wait(0方法
wait()【控制线程暂停,释放同步监视器的加锁,会一直等待,直到收到“唤醒”通知】
notify() 【发出“唤醒”通知】
notifyAll() 【发出“唤醒”通知】