黑马程序员----多线程的实现方法和其之间的通信
来源:互联网 发布:java服务端开发 编辑:程序博客网 时间:2024/05/12 06:07
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
总结:线程是一个很重要的java的知识点,对于计算机的应用范围很广泛,所以这是一个重点,学习的重点.
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">什么叫做进程?什么又叫做线程?两者有什么区别?</span>
进程:正在行 中的程序 中的程序 。
线程:就是进中一个负责序执行的控制单元 线程:就是进中一个负责序执行的控制单元 线程:就是进中一个负责序执行的控制单元 线程:就是进中一个负责序执行的控制单元。
一个进程中可以多执行路径,称之为线。 一个进程中可以多执行路径,称之为线。 一个进程中可以多执行路径,称之为线。
开启多个线程是为了同时运行部分代码。
每一个线程都有自己运行的内容。 这可以称为要执任务每一个线程都有自己运行的内容。
多线程好处:解决了部分同时运行的问题。
多线程的弊端:使回到效率降低。
其实应用程序的执行都是 cpucpu 在做着快速的 切换完成在做着快速的切换,这个切换是随机的。
JVM 启动时就了多个线程,至少有两可以分析的出来。 启动时就了多个线程,
1.main函数里面的线程,具体的韩顺在main函数里面.
2.垃圾回收的线程,保护内存.
class Demo extends Object{public void Test(){System.out.println("Demo ok");}}class ThreadDemo {public static void main(String[] args){new Demo();new Demo();new Demo();System.gc();System.out.println("Hello World");}}/*运行结果:Hello World*/
<span style="font-family:Arial, Helvetica, sans-serif;">实现多线程的方法?</span>一,继承Thread类,复写run()方法,直接创建Thread对象从而创建线程,最后调用start方法.
class Test2 extends Thread{private String name;Test2(String name){super(name);//this.name = name;}public void run(){for(int x=0; x<3; x++){System.out.println(name+"......x="+x+"......name="+Thread.currentThread().getName());}}}class Demo2{public static void main(String[] args){Test2 d1 = new Test2("xiaoming");Test2 d2 = new Test2("xiao");d1.start();d2.start();System.out.println("over..."+Thread.currentThread().getName());}}/*运行结果:over...mainnull.....x=0......name=xiaonull.....x=1......name=xiaonull.....x=2......name=xiaonull.....x=0......name=xiaomingnull.....x=1......name=xiaomingnull.....x=2......name=xiaoming*/二,实现Runnable()接口,复写run()方法,直接创建Thread对象,然后将这个对象当做参数,传入到以接口的父类创建的对象里面,最后调用START方法.
class Test3 implements Runnable{public void run(){show();}public void show(){for(int x=0; x<3; x++){System.out.println(Thread.currentThread().getName()+"...."+x);}}}class Demo3{public static void main(String[] args){Test3 d = new Test3();Thread t1 = new Thread(d);Thread t2 = new Thread(d);t1.start();t2.start();}}/*运行结果:Thread-0....0Thread-1....0Thread-0....1Thread-0....2Thread-1....1Thread-1....2*/
<span style="font-family:Arial, Helvetica, sans-serif;">死锁产生的原因?</span>本质上就是锁的相互嵌套,从而锁死了.
<span style="font-family:Arial, Helvetica, sans-serif;">死锁的解决方法?</span>synchaonized同步嵌套.
class Test4 implements Runnable{private boolean flag;Test4(boolean flag){this.flag = flag;}public void run(){if(flag){while(true)synchronized(MyLock.locka){System.out.println(Thread.currentThread().getName()+"..if locka...");synchronized(MyLock.lockb){System.out.println(Thread.currentThread().getName()+"..if lockb...");}}}else{while(true){synchronized(MyLock.lockb){System.out.println(Thread.currentThread().getName()+"..if lockb...");synchronized(MyLock.locka){System.out.println(Thread.currentThread().getName()+"..if locka...");}}}}}}class MyLock{public static final Object locka = new Object();public static final Object lockb = new Object();}class DeadLockTest{public static void main(String[] args){Test4 a = new Test4(true);Test4 b = new Test4(false);Thread t1 = new Thread(a);Thread t2 = new Thread(b);t1.start();t2.start();}}
<span style="font-family:Arial, Helvetica, sans-serif;">线程中的join方法.</span>
class Test5 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){Test5 d = new Test5();Thread t1 = new Thread(d);Thread t2 = new Thread(d);t1.start();t2.start();}}
<span style="font-family:Arial, Helvetica, sans-serif;">线程之间的通信.</span>多个线程处理同一个资源,但是任务却不相同.
class Input implements Runnable{Resource r;Input(Resource r){this.r = r;}public void run(){int x = 0;while(true){synchronized(r){if(x==0){r.name = "mike";r.sex = "man";}else{r.name= "丽丽";r.sex = "女";}}x = (x+1)%2;}}}class Output implements Runnable{Resource r;Output(Resource r){this.r = r;}public void run(){while(true){synchronized(r){System.out.println(r.name+"..."+r.sex);}}}}class ResourceDemo{public static void main(String[] args){//创建资源Resource r = new Resource();//创建任务Input in = new Input(r);Output out = new Output(r);//创建线程,执行路径Thread t1 = new Thread(in);Thread t2 = new Thread(out);//开启线程t1.start();t2.start();}}
总结:线程是一个很重要的java的知识点,对于计算机的应用范围很广泛,所以这是一个重点,学习的重点.
0 0
- 黑马程序员----多线程的实现方法和其之间的通信
- 黑马程序员:Java基础——多线程之间的通信
- 黑马程序员-----多线程之间的通信(生产者消费者)
- 黑马程序员_java多线程的实现方法
- 黑马程序员-多线程--线程间的通信
- 黑马程序员 多线程的实现
- 黑马程序员-oc对象和方法之间的关系
- 黑马程序员--对象和方法之间的关系
- 黑马程序员_实现多线程的2种方法
- 黑马程序员----多线程的两种实现方法
- Condidtion实现多线程之间的线程通信
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信
- 多线程之间的通信生产者和消费者
- 黑马程序员——JAVA基础---线程之间的通信实现交替输出打印
- windows下emacs生成tags
- JX8NET小游戏网 ACL/PermissionCode/NoNeed
- 使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面
- Java Code Review清单
- 黑马程序员----多线程的实现方法和其之间的通信
- ubuntu 10.04配置tftp服務器
- AVAudioSession样式
- 跨平台测试工具Jenkins的部署
- 常州治疗子宫肌瘤哪家医院技术好
- java导入导出下载Excel文件(带下拉框)
- uva-10905Children's Game(贪心)
- 如何使用流媒体数据代理功能?
- 一句话木马集合