线程和JavaAPI
1. 线程
1.1 Java中创建线程的两种方法
package com.qfedu.a_thread;
/*
第一种方式:
自定义线程类继承Thread类,重写Thread类中的run方法。
run方法中的代码块是线程代码块
*/
class MyThread1 extends Thread {
@Override
public void run() {
// 线程代码块
for (int i = 0; i < 10; i++) {
System.out.println("自定义线程类对象代码块");
}
}
}
/*
第二种方式:
自定义线程类遵从Runnable接口,实现Runnable接口中的run方法
run方法中的代码块是线程代码块
*/
class MyThread2 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("自定义线程类遵从Runnable接口实现代码");
}
}
}
public class Demo1 {
public static void main(String[] args) {
// 1. 创建自定义线程类对象
MyThread1 thread1 = new MyThread1();
// 2. 调用Thread类内的start方法开启线程
thread1.start();
// 创建遵从Runnable接口的自定义线程对象
// 1. 创建Thread类对象,并且使用Runnable接口的实现类对象作为构造方法参数
Thread thread = new Thread(new MyThread2());
// 2. 调用Thread类内的start方法开启线程
thread.start();
for (int i = 0; i < 10; i++) {
System.out.println("main线程");
}
}
}
/*
遵从接口Runnable自定义线程类使用是要优于继承Thread类
因为Java是单继承语言,如果一个类继承了Thread类,就无法在继承其他类!!!
但是一个类遵从Runnable接口,不影响继承逻辑,也不影响继承其他接口
【墙裂推荐】
遵从Runnable接口的自定义线程类使用方式。【仅是现在】
*/
1.2 线程中的方法
构造方法:
Thread();
创建一个线程类对象,并且线程的名字和执行代码没有确定,名字为null。
Thread(Runnable target);
创建一个线程类对象,使用遵从Runnable接口的实现类对象target,作为线
程代码块,没有线程名
Thread(Runnable target, String name);
创建一个线程类对象,使用遵从Runnable接口的实现类对象target,作为线
程代码块,线程名为指定name
成员方法:
void setName(String name);
设置当前线程的名字
String getName();
获取当前线程的名字
void setPriority(int priority);
设置当前线程的优先级
线程优先级,默认是5,优先级范围 1 ~ 10
优先级可以决定当前线程的抢占资源的概率!!!
int getPriority();
获取当前线程的优先级
static void sleep(int ms) throw XXXXException;
在哪一个线程中执行,当前线程休眠指定时间,时间单位为ms 毫秒
static Thread currentThread();
在哪一个线程中执行,获取的就是哪一个线程类对象
1. 获取当前所处线程代码块对应的线程对象
2. 要求当前线程代码必须执行
非Thread类内的方法,Object类内与线程相关方法
void wait();
线程进入阻塞状态
void notify();
唤醒在【线程池】中阻塞状态的一个线程 蹑手蹑脚叫醒一个
void notifyAll();
唤醒在【线程池】中阻塞状态的所有线程 一声 起来了~~~
1.3 共享资源问题,同步代码块
11月23日 岳云鹏孙越合作十周年
100张票
淘票票 大麦网 美团
100张票是共享资源
三种销售渠道,三个销售线程
同步代码块
当前代码块内有且只允许一个线程执行!!!
synchronized (锁对象) {
}
1. 锁对象首先必须是一个对象
2. 锁对象在操作的过程中,对于所有的线程,必须是唯一对象
3. sleep方法不会开启锁对象
4. 在重写要求下,子类或者实现类重写父类或者接口中方法时
要求方法的声明完全一致,包括异常类型抛出
run方法在Runnable接口中是没有任何异常抛出的
那么要求子类也不能抛出任何异常和Runnable接口一致
这里只能捕获!!!
希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436