线程冲突整理

来源:互联网 发布:jquery数组删除空元素 编辑:程序博客网 时间:2024/06/16 11:19

package com.binghan.ThreadLifeCycle;/*进程和进城相比就是节约资源,因为多个线程事共享内存的。有的时候线程又称为轻进程。多个进程在访问相同内存的时候有时候会出现访问冲突。例如:在A线程在修改年龄和姓名的时候,B线程在读取年龄和姓名。当在一种特殊的情况下,A线程在刚刚修改完姓名还没有来得及修改年龄时,它已经被调度修改进入到就绪队列,B线程运行时,去读取信息,这时候就容易出现张冠李戴的情况。那么java语言和C语言是怎么解决这个问题的呢?JAVA内置了多线程的支持,Java完全把这种功能放到了java语言之中,是java语言和语法的一部分。C语言需要调用特殊的函数才能完成。注意:敏感资源在线程访问中会出现访问冲突。*/// TODO Auto-generated method stubclass B extends Thread{ public void run() { for(int i = 0;i < 30;i++) { System.out.println("B类:"+this.getName()+i); try{ //sleep()方法容易出现错误,需要去捕捉住这个异常并抛出来。 Thread.sleep(1000); }catch(Exception e) { } } for(int i = 30;i < 60;i++) { System.out.println("B类敏感资源:"+this.getName()+i); try{ //sleep()方法容易出现错误,需要去捕捉住这个异常并抛出来。 Thread.sleep(1000); }catch(Exception e) { } } for(int i = 60;i < 100;i++) { System.out.println("B类:"+this.getName()+i); try{ //sleep()方法容易出现错误,需要去捕捉住这个异常并抛出来。 Thread.sleep(1000); }catch(Exception e) { } } }}class C implements Runnable{/* * 1.因为C类没有继承Thread类,所以没有办法使用.getName()方法。 * 解决办法:我们调用Thread类的静态方法currentThread(). * * * */ public void run() { for(int i = 0;i < 30;i++) { System.out.println("C类:"+Thread.currentThread().getName()+i); try{ //sleep()方法容易出现错误,需要去捕捉住这个异常并抛出来。 Thread.sleep(1000); }catch(Exception e) { } } for(int i = 30;i < 60;i++) { System.out.println("C类敏感资源:"+Thread.currentThread().getName()+i); try{ //sleep()方法容易出现错误,需要去捕捉住这个异常并抛出来。 Thread.sleep(1000); }catch(Exception e) { } } for(int i = 60;i < 100;i++) { System.out.println("C类:"+Thread.currentThread().getName()+i); try{ //sleep()方法容易出现错误,需要去捕捉住这个异常并抛出来。 Thread.sleep(1000); }catch(Exception e) { } } }}public class Thread0002{ public static void main(String[] args) { /* * 现在一共创建了3个线程: * 1.B().start()创建的线程。 * 2.通过创建Thread(new C())来创建的线程。 * 3.这个类的主线程main。 */ new B().start(); //C类不能直接调用Start()方法,因为Start()方法是Thread类独有的。 //如果想要C类可以调用Start()方法,就必须先创建出Thread类,在Thread里面创建C类。 new Thread(new C()).start(); }}
0 0