线程的简单学习

多线程:使程序能有多个执行路径,避免某一方法阻塞导致后续方法全部阻塞

创建线程对象的两个方法:继承Thread类或者实现Runnable接口(两者都需要重写run()方法)

线程对象:thread

thread.start();//启动新线程
thread.run();//仅仅只是调用run方法,并没有启用新线程
注:一个线程多次启用是不被允许的,即start只能调用一次

多线程的调用时重新开栈进行的,并不会压栈进行,各个线程的栈区别分独立

//A是线程对象
A.getName();//获得当前线程的名字 此方法是非静态方法
Thread.currentThread();//获得并返回当前运行线程对象,一个静态方法
setName();//更改线程名 maim即主线程的名字无法更改
sleep();//参数为ms值,在调用时,线程先睡眠多久 

另一种新建线程方法:

SubRunnable r = new SubRunnable();//创建实现了Runnable接口的类,要重写run();
Thread thread = new Thread(r);//传入Runnable对象是为了能够创建新线程对象,只有Thread才有start();

实现Runnable接口的好处:避免了单继承的局限性,同时降低了对象与方法的耦合性  实验数据可共享

匿名内部类的实现:

new Thread(){public void run(){}}.start();//此方法直接实现了匿名内部类的实例化,此对象是Thread的子类
new Runnable(){public void run(){}}//此方法的对象是实现了接口的对象
阻塞状态中,只要cpu有空闲即可执行,若是等待或者睡眠状态(wait(),sleep()),即使cpu空闲也不会执行,等待中的线程可以用notify()方法唤醒,唤醒后可能阻塞,也可能被执行

猜你喜欢

转载自blog.csdn.net/salted_fish_master/article/details/80354359