Java多线程方法有哪些

Java多线程方法有哪些

这篇文章主要介绍“Java多线程方法有哪些”,在日常操作中,相信很多人在Java多线程方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java多线程方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

一、interrupt方法一种让线程退出的方式。

Java多线程方法有哪些

importjava.util.*;publicclassTestInterrupt{publicstaticvoidmain(String[]args){MyThreadt=newMyThread();t.start();try{Thread.sleep(10000);}catch(InterruptedExceptioni){}t.interrupt();}}classMyThreadextendsThread{publicvoidrun(){while(true){try{System.out.println("------"+newDate()+"-----");Thread.sleep(1000);}catch(InterruptedExceptioni){return;}}}}

二、join和yield方法
t.join(); //t的run()方法完才会继续执行当前线程方法体
//也就是两个线程变成了一个线程
t.yield(); //暂停当前正在执行的线程对象,并执行其他线程。方法为静态
//哪个线程体执行此方法,哪个线程让步

publicclassTestYield{publicstaticvoidmain(String[]args){MyThread3t1=newMyThread3("t1");MyThread3t2=newMyThread3("t2");t1.start();t2.start();}}classMyThread3extendsThread{MyThread3(Strings){super(s);}publicvoidrun(){for(inti=1;i<=100;i++){System.out.println(getName()+":"+i);if(i%10==0){yield();}}}}

三、线程优先级别
线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级为5.
Thread.MAX_PRIORITY=1
Thread.MIN_PRIORITY=10
Thread.NORM_PRIORITY=5
例:t.setPriority(Thread.NORM_PRIORITY+3);

四、线程同步
1.同步代码块
synchronized(this){ //在执行代码块过程中,不会被其他线程打断
...
}
public sunchronized void method //执行此方法时,当前对象被锁定
在Java语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性,每个对象 都对应一个可称为"互斥锁"的标记,这个标记保证在任一时刻,只能有一个线程访 问该对象。
2.线程死锁

publicclassTestDeadLockimplementsRunnable{publicintflag=1;staticObjecto1=newObject(),o2=newObject();publicvoidrun(){System.out.println("flag="+flag);if(flag==1){synchronized(o1){try{Thread.sleep(500);}catch(Exceptione){e.printStackTrace();}synchronized(o2){System.out.println("1");}}}if(flag==0){synchronized(o2){try{Thread.sleep(500);}catch(Exceptione){e.printStackTrace();}synchronized(o1){System.out.println("0");}}}}publicstaticvoidmain(String[]args){TestDeadLocktd1=newTestDeadLock();TestDeadLocktd2=newTestDeadLock();td1.flag=1;td2.flag=0;Threadt1=newThread(td1);Threadt2=newThread(td2);t1.start();t2.start();}}

五、生产者消费者问题

publicclassProducerConsumer{publicstaticvoidmain(String[]args){SyncStackss=newSyncStack();Producerp=newProducer(ss);Consumerc=newConsumer(ss);newThread(p).start();newThread(p).start();newThread(p).start();newThread(c).start();}}classWoTou{intid;WoTou(intid){this.id=id;}publicStringtoString(){return"WoTou:"+id;}}classSyncStack{//栈实现intindex=0;WoTou[]arrWT=newWoTou[6];//相当于装物品的篮子publicsynchronizedvoidpush(WoTouwt){//生产物品,线程安全while(index==arrWT.length){//当篮子满了线程等待try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}this.notifyAll();//开始生产时,叫醒等待的其他线程开始消费arrWT[index]=wt;index++;}publicsynchronizedWoToupop(){//消费物品,线程安全while(index==0){//如果篮子空了try{this.wait();//线程等待,等待生产者开始//生产,叫醒此线程}catch(InterruptedExceptione){e.printStackTrace();}}this.notifyAll();//消费时喊醒生产者生产index--;returnarrWT[index];}}classProducerimplementsRunnable{//生产者类SyncStackss=null;Producer(SyncStackss){this.ss=ss;}publicvoidrun(){for(inti=0;i<20;i++){//生产20个WoTouwt=newWoTou(i);ss.push(wt);System.out.println("生产了:"+wt);try{Thread.sleep((int)(Math.random()*200));}catch(InterruptedExceptione){e.printStackTrace();}}}}classConsumerimplementsRunnable{SyncStackss=null;Consumer(SyncStackss){this.ss=ss;}publicvoidrun(){for(inti=0;i<20;i++){//消费20个WoTouwt=ss.pop();System.out.println("消费了:"+wt);try{Thread.sleep((int)(Math.random()*1000));}catch(InterruptedExceptione){e.printStackTrace();}}}}

到此,关于“Java多线程方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

发布于 2022-01-06 23:29:55
收藏
分享
海报
0 条评论
43
上一篇:Java随机数怎么应用 下一篇:如何用Java+OpenCV实现拍照功能
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码