线程
来源:互联网 发布:apache derby 编辑:程序博客网 时间:2024/05/22 00:50
线程
线程实现方法:Thread类,继承Runnable接口。但是Runnable需要用Thread实例。
优先级
<span style="font-size:14px;">class RunnableTest implements Runnable{public void run() {// TODO Auto-generated method stubfor(int j=0;j<5;j++){try {Thread.sleep(1000);System.out.print(Thread.currentThread().getName()+":"+j+" ");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public class RunnableDome {public static void main(String[] args) {// TODO Auto-generated method stubThread t1=new Thread(new RunnableTest(),"A");Thread t2=new Thread(new RunnableTest(),"B");Thread t3=new Thread(new RunnableTest(),"c");//设置优先级t1.setPriority(Thread.MIN_PRIORITY);t2.setPriority(Thread.MAX_PRIORITY);t3.setPriority(Thread.NORM_PRIORITY);t1.start();t2.start();t3.start();}}</span>
线程常用方法
<span style="font-size:14px;">public class ThreadDemo extends Thread{String name;public ThreadDemo(String name){this.name=name;}//必须重写run()方法,把功能代码放入public void run(){System.out.println("返回当前线程的线程组中活动线程的数目:"+Thread.activeCount());System.out.println("返回对当前正在执行的线程对象的引用:"+Thread.currentThread());System.out.println("返回该线程的名称:"+Thread.currentThread().getName());for(int j=0;j<10;j++){if(j>5&&j<8){//暂停当前正在执行的线程对象,并执行其他线程yield();System.out.println(name+":"+j);}else if(j>8){try {//join()等待该线程终止join();System.out.println("name:"+j);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}else{try {//sleep()方法是指定的毫秒数内让当前正在执行的线程休眠。sleep(1000);System.out.println(name+":"+j);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}public static void main(String[] args) {// TODO Auto-generated method stub//创建线程ThreadDemo t1=new ThreadDemo("A");ThreadDemo t2=new ThreadDemo("B");//启动线程方法start()方法。几个线程时,谁抢到资源谁先执行t1.start();t2.start();System.out.println("测试线程是否处于活动状态:"+Thread.currentThread().isAlive());}}</span>线程的同步机制synchronized
1.同步代码块
synchronized(同步对象){
需要同步的代码
}
<span style="font-size:14px;">class Test implements Runnable{ //定义车票数量,好为下面进行判断private int ticket=10;public void run() {// TODO Auto-generated method stubfor(int j=1;j<11;j++){synchronized(this){if(ticket>0){try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("车票:"+ticket--);}}}}}public class Synchronized01 {public static void main(String[] args) {// TODO Auto-generated method stub<span style="color:#FF0000;">//三个窗口同时卖10张票,这时候,实例对象,Thread线程的对象必须是同一个</span>Test t=new Test();Thread t1=new Thread(t);Thread t2=new Thread(t);Thread t3=new Thread(t);t1.start();t2.start();t3.start();}}</span>
2.同步方法
synchronized void 方法名(){
}class Test implements Runnable{private int ticket=10;public void run() {// TODO Auto-generated method stubfor(int j=1;j<11;j++){tell();}}synchronized void tell(){if(ticket>0){try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("车票:"+ticket--);}}}public class Synchronized01 {public static void main(String[] args) {// TODO Auto-generated method stub//三个窗口同时卖10张票Test t=new Test();Thread t1=new Thread(t);Thread t2=new Thread(t);Thread t3=new Thread(t);t1.start();t2.start();t3.start();}}
效果和同步代码块一样
1 0
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- Android自定义控件无法通过代码修改大小、高宽,setMinimumHeight无效的问题
- OC中对数组排序的几种方法
- Android 6.0运行时权限
- iOS UI绘制和布局基础解析
- [小技巧]如何得到C语言中int最大值
- 线程
- 1863: [Zjoi2006]trouble 皇帝的烦恼
- 47、Java中怎么把字符串转换成日期格式啊
- CSR8670的A2DP与AVRCP的应用笔记
- Android中Fragment学习笔记
- 解决“U盘插入Ubuntu后文件只读且无法删除”问题
- cocos2d-lua09apk打包发布&C++注册到Lua
- tomcat 默认网站和虚拟目录配置
- curl与php