多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例),停止线程,线程中方法的区别,匿名内部类实现多线程,线程总结
来源:互联网 发布:java sleep占用cpu 编辑:程序博客网 时间:2024/05/18 02:29
JDK1.5解决办法-范例,代替以前的同步代码块和同步函数,效率变得更高。
class BoundedBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition notEmpty = lock.newCondition(); final Object[] items = new Object[100]; int putptr, takeptr, count; public void put(Object x) throws InterruptedException { lock.lock();//拿到锁 try { while (count == items.length) notFull.await();//让线程等待 items[putptr] = x; if (++putptr == items.length) putptr = 0; ++count; notEmpty.signal(); } finally { lock.unlock();//释放锁 } } public Object take() throws InterruptedException { lock.lock(); try { while (count == 0) notEmpty.await(); Object x = items[takeptr]; if (++takeptr == items.length) takeptr = 0; --count; notFull.signal(); return x; } finally { lock.unlock(); } } }
停止线程的方法,后台线程(守护线程):
/*停止线程:1,stop方法。2,run方法结束。怎么控制线程的任务结束呢?任务中都会有循环结构,只要控制住循环就可以结束任务。控制循环通常就用定义标记来完成。但是如果线程处于了冻结状态,无法读取标记。如何结束呢?可以使用interrupt()方法将线程从冻结状态强制恢复到运行状态中来,让线程具备cpu的执行资格。 当时强制动作会发生了InterruptedException,记得要处理*/class StopThread implements Runnable{private boolean flag = true;public synchronized void run(){while(flag){try{wait();//t0 t1}catch (InterruptedException e){System.out.println(Thread.currentThread().getName()+"....."+e);flag = false;}System.out.println(Thread.currentThread().getName()+"......++++");}}public void setFlag(){flag = false;}}class StopThreadDemo {public static void main(String[] args) {StopThread st = new StopThread();Thread t1 = new Thread(st);Thread t2 = new Thread(st);t1.start();t2.setDaemon(true);t2.start();int num = 1;for(;;){if(++num==50){//st.setFlag();t1.interrupt();//t2.interrupt();break;}System.out.println("main...."+num);}System.out.println("over");}}
join方法、yield方法:作为了解。
class Demo implements Runnable{public void run(){for(int x=0; x<50; x++){System.out.println(Thread.currentThread().toString()+"....."+x);Thread.yield();让线程暂停,使其他线程进来}}}class JoinDemo{public static void main(String[] args) throws Exception{Demo d = new Demo();Thread t1 = new Thread(d);Thread t2 = new Thread(d);t1.start();t2.start();//t2.setPriority(Thread.MAX_PRIORITY);设置线程的优先级//t1.join();//t1线程要申请加入进来,运行。临时加入一个线程运算时可以使用join方法。for(int x=0; x<50; x++){//System.out.println(Thread.currentThread()+"....."+x);}}}
wait 和 sleep 区别?
1,wait可以指定时间也可以不指定。
sleep必须指定时间。
2,在同步中时,对cpu的执行权和锁的处理不同。
wait:释放执行权,释放锁。
sleep:释放执行权,不释放锁。
class Demo
{
void show()
{
synchronized(this)//
{
wait();//t0 t1 t2
}
}
void method()
{
synchronized(this)//t4
{
//wait();
notifyAll();
}//t4
}
}
class
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
匿名内部类实现多线程,面试题:
/*class Test implements Runnable{public void run(Thread t){}}*///如果错误 错误发生在哪一行?错误在第一行,应该被abstract修饰class ThreadTest {public static void main(String[] args) {new Thread(new Runnable(){public void run(){System.out.println("runnable run");}}){public void run(){System.out.println("subThread run");}}.start();/*匿名内部类实现多线程的方式new Thread(){public void run(){for(int x=0; x<50; x++){System.out.println(Thread.currentThread().getName()+"....x="+x);}}}.start();for(int x=0; x<50; x++){System.out.println(Thread.currentThread().getName()+"....y="+x);}Runnable r = new Runnable(){public void run(){for(int x=0; x<50; x++){System.out.println(Thread.currentThread().getName()+"....z="+x);}}};new Thread(r).start();*/}}
package src;/*多线程总结:1,进程和线程的概念。|--进程:|--线程:2,jvm中的多线程体现。|--主线程,垃圾回收线程,自定义线程。以及他们运行的代码的位置。3,什么时候使用多线程,多线程的好处是什么?创建线程的目的?|--当需要多部分代码同时执行的时候,可以使用。4,创建线程的两种方式。★★★★★|--继承Thread|--步骤|--实现Runnable|--步骤|--两种方式的区别?5,线程的5种状态。对于执行资格和执行权在状态中的具体特点。|--被创建:|--运行:|--冻结:|--临时阻塞:|--消亡:6,线程的安全问题。★★★★★|--安全问题的原因:|--解决的思想:|--解决的体现:synchronized|--同步的前提:但是加上同步还出现安全问题,就需要用前提来思考。|--同步的两种表现方法和区别:|--同步的好处和弊端:|--单例的懒汉式。|--死锁。7,线程间的通信。等待/唤醒机制。|--概念:多个线程,不同任务,处理同一资源。 |--等待唤醒机制。使用了锁上的 wait notify notifyAll. ★★★★★|--生产者/消费者的问题。并多生产和多消费的问题。 while判断标记。用notifyAll唤醒对方。 ★★★★★|--JDK1.5以后出现了更好的方案,★★★Lock接口替代了synchronized Condition接口替代了Object中的监视方法,并将监视器方法封装成了Condition和以前不同的是,以前一个锁上只能有一组监视器方法。现在,一个Lock锁上可以多组监视器方法对象。可以实现一组负责生产者,一组负责消费者。 |--wait和sleep的区别。★★★★★8,停止线程的方式。|--原理:|--表现:--中断。9,线程常见的一些方法。|--setDaemon()|--join();|--优先级|--yield();|--在开发时,可以使用匿名内部类来完成局部的路径开辟。 class {public static void main(String[] args) {System.out.println("Hello World!");}}*/
0 0
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例),停止线程,线程中方法的区别,匿名内部类实现多线程,线程总结
- 29-多线程(线程间通信-多生产者多消费者问题-JDK1.5新特性-Condition).1 2 31-多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例). 1 2
- 27-多线程(线程间通信-多生产者多消费者问题解决) 28-多线程(线程间通信-多生产者多消费者问题-JDK1.5新特性-Lock)1 2
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5新特性-Lock
- Java 多线程(三)线程间的通信jdk1.5中Lock,Condition---生产者消费者为例
- 生产者和消费者多线程--线程间通信
- JAVA多线程-线程间通信(二)-生产者/消费者模式实现
- Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”
- java多线程中的生产者消费者模式实现线程间的通信
- 从java多线程实现“生产者-消费者”模型来谈谈操作系统中线程状态的转换及线程同步的总结
- 多线程—03—线程间通信、生产者消费者
- java多线程-线程间通信_生产者消费者
- Java多线程编程3--线程间通信--生产者/消费者模式
- JavaSE 多线程 线程间通信 生产者与消费者案例
- Java多线程之线程间通信--生产者/消费者模式
- 线程间通信-多生产者多消费者
- 线程间通信、等待唤醒机制、生产者消费者问题(Lock,Condition)、停止线程和守护线程、线程优先级
- 多线程中线程停止的问题
- PackageManagerService学习笔记五-构造方法
- 基于android4.4 KitKat 制作彩色Emoji的字体
- 二逼事汇总 第3期
- 深入理解JVM之java代码的执行机制
- Csh脚本调用Csh脚本,sh脚本调用Csh脚本
- 多线程(线程间通信-多生产者多消费者问题-JDK1.5解决办法-范例),停止线程,线程中方法的区别,匿名内部类实现多线程,线程总结
- eclipse的一些问题总结
- Java函数
- uva1467 - Installation 贪心+暴力
- java表达式
- java流程控制
- java面向对象
- android应用实现重启系统
- java面向对象试题及答案