Thread.sleep(millis); 使当前线程休眠,单位毫秒
join()会阻塞其他线程,让调用这个方法的线程先执行完
yield()会让出cpu调度权,把下次调度机会让给其他线程
volatile关键词,多个线程操作同一变量更安全
两者对比:
1:一个是Thread类,一个是Runnable接口;Runnable方式可以避免Thread方式由于Java单继承性带来的缺陷
2:Thread类:
MyThread my = new MyThread();
my.start();
Runable 接口:
MyThread my = new MyThread();
Thread thread = new Thread(my);
3:Runable代码(实例)可以被多个线程共享,适合于多个线程处理同一资源(也就是说各个线程有公用信息<总票数>)的情况
MyThread my = new MyThread();
Thread thread = new Thread(my);
thread.start();
Thread thread1 = new Thread(my);<-这里->
thread2.start();
线程的生命周期:
创建---new线程
就绪---start方法
阻塞事件---sleep、wait、join方法
守护线程:一般运行于后台,为其它的用户线程(运行在前台,处理具体任务)来服务,当所有的用户线程都消亡,没有可服务的对象,守护线程即会自动消亡。例如检测服务,常见例子如JAVA的垃圾回收机制。所有在守护线程里面不适合做计算以及业务逻辑的操作
创建方式:在线程启动之前(调用start()方法),调用setDaemon(threadName,true)来申明这个是守护线程即可
join()会阻塞其他线程,让调用这个方法的线程先执行完
yield()会让出cpu调度权,把下次调度机会让给其他线程
volatile关键词,多个线程操作同一变量更安全
两者对比:
1:一个是Thread类,一个是Runnable接口;Runnable方式可以避免Thread方式由于Java单继承性带来的缺陷
2:Thread类:
MyThread my = new MyThread();
my.start();
Runable 接口:
MyThread my = new MyThread();
Thread thread = new Thread(my);
3:Runable代码(实例)可以被多个线程共享,适合于多个线程处理同一资源(也就是说各个线程有公用信息<总票数>)的情况
MyThread my = new MyThread();
Thread thread = new Thread(my);
thread.start();
Thread thread1 = new Thread(my);<-这里->
thread2.start();
线程的生命周期:
创建---new线程
就绪---start方法
阻塞事件---sleep、wait、join方法
守护线程:一般运行于后台,为其它的用户线程(运行在前台,处理具体任务)来服务,当所有的用户线程都消亡,没有可服务的对象,守护线程即会自动消亡。例如检测服务,常见例子如JAVA的垃圾回收机制。所有在守护线程里面不适合做计算以及业务逻辑的操作
创建方式:在线程启动之前(调用start()方法),调用setDaemon(threadName,true)来申明这个是守护线程即可