-
1:线程的互斥是指,在同一时间关键数据只能有一个线程访问<br>
2:线程互斥的实现有synchronized关键字来实现,类似于给对应的代码加锁,只有获得锁的线程才能运行此段代码
3:线程的同步是指,线程间的一种通信控制,一个线程完成了某事后通知另一个线程可以进行下面的事情了
4:线程同的实现有wait(),notify(),notifyall()这几个方法来实现,这几个方法都是属于object查看全部 -
1.如果线程在之前被join()、sleep()或者wait()等方法阻塞,interrrupt使用会产生两种结果:一种是清除中断状态,一种是获得interruptedException
查看全部 -
mrCheng.join()方法解释:
当主线程调用了其他线程的join方法时,必须执行完子线程中的代码才能接着执行主线程下面的方法.
查看全部 -
为了保证多个线程可以正确读取其他线程写入的值,共享资源需要加volatile关键字
volatile boolean keepRunning;
查看全部 -
Thread常用方法
查看全部 -
1,不能使用interrupt()方法停止线程,它是中断线程;
2,如果一个线程因为调用某些方法(join(),sleep(),wait())被阻塞时,interrupt()方法会使得线程的中断状态被清除,并且当前线程会收到异常;
查看全部 -
正确退出线程:使用flag
好处:使得线程有机会使得一个完整的业务步骤被完整地执行,在执行完业务步骤后有充分的时间去做代码的清理工作,使得线程代码在实际中更安全
查看全部 -
1.在同一时间,同一处理器或同一个核只能运行一条线程,当一条线程休眠之后,另一条线程才获得了我们处理器的时间
2.Runnable接口之中没有getName方法,我们可以使用Thread的静态方法currentThreat().getName()获取该对象的名字。
3.若实现接口通过Thread.currentThread().getName()方法获取当前线程名称,继承Thread则getName()方法获取当前线程名称查看全部 -
java线程中start和run方法的区别
Start:
用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到spu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。Run:
run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。
查看全部 -
互斥:关键数据在一个时间被一个线程使用。
同步实现:object 方法wait()/notify()/notifyAll();
wait set 类似于线程的休息室,访问共享数据的代码称为critical section。一个线程获取锁,然后进入临界区 ,发现某些条件不满足,然后调用锁对象上的wait方法,然后线程释放锁资源,进入锁对象上的wait set。其他线程可以获取所资源,然后执行,完了以后调用notify()/notifyAll(),唤醒锁对象上的一个/全部等待线程,有机会在当前线程离开临界资源释放锁之后竞争临界资源的锁对象。查看全部 -
Stage舞台继承了Thread类,其实它相当于一个总线程,用于控制多个线程协同工作的,yield()方法是让当前线程可以让出处理器,让多条线程可以同时进行的关键,join()方法就相当于等待线程,由于各个线程独立运行互不干扰,当它们同时进行的时候,会出现某个线程过早结束的情况,本例中的Stage总线程如果不在"程咬金"线程出现的时候使用join方法,它就会在启动了"程咬金"线程之后运行结束,导致舞台剧过早结束,所以用join方法来等待"程咬金"线程,只有当使用了join方法的线程运行完毕了之后,也就是等待"程咬金"线程运行完毕以后,才是舞台剧的谢幕
查看全部 -
进程
1.程序(任务)的执行过程。进程是动态性的,放在磁盘文件中的文件并不是进程,只有在运行状态的才可称之为进程。
2.持有资源(共享内存,共享文件)和线程。进程是资源和线程的载体线程
1.线程是系统中最小的执行单元
2.同一进程中有多个线程
3.线程共享进程的资源
线程的交互:多个线程需要正确的通信才能进行工作。
交互方式有互斥和同步两种。查看全部 -
正确的停止线程的运行
1:首先使用线程自带的方法stop(),是不正确的,原因如下:此方法会导致线程戛然而止,我们不清楚线程完成了什么,没完成什么,也没有时间来完成对应的线程运行的清理工作。
2:正确停止线程的方法是,在线程执行中设置状态标识,通过控制此状态标识,来控制线程的正常完整的结束,另外,volatile关键字是保证线程变量对外可见的标志,通过此关键字修饰的状态变量,才能在别的线程中被正确的赋值。
查看全部 -
Thread常用方法
sleep(long millis, int nanos) 线程休眠 millis休眠的时间,单位是毫秒,可以精确到纳秒
join(long millis, int nanos) 调用线程 可以让其它线程等待自己运行,直到结束
static void yield() 当前运行线程释放处理器资源并且重新去竞争处理器资源
static Thread currentThread() 返回当前正在处理器上运行的线程的引用
重载的几个形式
1.没有参数,指明了其它的线程一定要等待正在执行的线程执行完毕之后,都会获得运行的机会
2.nanos是要把精确度改变,可改成纳秒查看全部 -
Thread actress = new Thread(new Actress(), "Ms. Runnable");
传入实现了Runnable接口的对像,和线程名称
查看全部
举报