另一种方法来创建一个线程是声明实现类Runnable接口。 那个类然后实现了run方法。 然后可以分配类的实例,在创建Thread时作为参数传递,并启动
7.2.1 实现线程的方式一: 继承Thread类为什么要重写run方法?
因为run方法是用来封装被线程执行的代码的。
run方和start方法的区别?
run()封装了线程执行的代码,直接调用的,相当于普通方法调用。
start方法 启动线程,然后由jvm调用此线程的run方法
7.2.2 实现线程的方式二: 实现Runnable接口public interface Runnable
Runnable接口应由任何类实现,其实例将由线程执行。 该类必须定义一个无参数的方法,称为run
Runnable r = new MyRannable(); Thread t1 = new Thread(r);
t1.start();
或 new Thread(new Runnable(){@Override public void run(){sout;} }).start();
7.3 设置和获取线程的名称Thread(name):有参构造,参数是线程的名字
th.setName(name);
Thread.currentThread();返回当前正在执行的线程对象的引用。
th.getName();
7.4 线程的优先级th.getPriority();
th.setPriority(pri);
每个线程都有优先权。 具有较高优先级的线程优先于优先级较低的线程执行
线程的两种调度模型
分时调度: 所有线程轮流实现CPU的使用权,平均分配每个线程占有CPU的时间片
抢占式调度: 优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个。优先级高的线程获得CPU执行权的概率更高。
java是的是抢占式的调度模型。
线程的默认优先级为5,线程的优先级的范围为1(小)--10(大)