当前位置:首页 > 全部子站 > IT > 思科认证

java的多线程同步初探

来源:长理培训发布时间:2017-12-23 14:25:14

 百度广告

java在语言层级实现的多线程操作的一些原语,用起来比较方便,不像C、C++之类的要调用操作系统功能才能实现多线程。这里展示一个样例show一下java多线程就是这样简单,一点也不神秘,java让在课本上经常讲的多任务多线程处理很方便的走到初学者的代码中来。(但是也很方便创造deadlock,死锁很难发现,如果不了解就最好不要用,不是必要场合不要用)。至于书上云的一些线程状态以及各状态间的转换则都是一样的,java多了一个线程组,便于以group的方式管理大量线程,更多介绍还是去看API或者google,baidu吧,记录之供参考。如果你能够自己写一遍生产者消费者(也有称读者写者)就有了3、5成功力了吧,那样才能够考虑把它用到你的production代码中去。

主要的就是一个Thread类,Thread类拥有一个Run()方法,还有一个Thread.start()来启动线程开工。实现多线程有两个方法

1.将要并行执行的操作封装到一个继承自Thread的类中去

public class thread_ex extends Thread...{

}
public void start() ...{
}
public void stop() ...{
}
public void run()...{
}

2.延伸Runnable接口,满足一些继承了其他类又想多线程的(因为java不像C++一样支持多继承)


public void init() ......{

//**will cll run() defualt.



//**do some parallelization works.

 与线程有关的几个关键词是很重要的:

 如果不能很好的理解他们还是不要用的好。简单的介绍如下

修饰定义一个对象或者方法或者属性的访问必须串行化访问,顾名思义像在银行取钱要排队一样,那个业务员就是一个synchronize 对象。只有像我等无钱之辈才去排队,那些个VIP自然不用了。

是一家的,他们是对象级的锁,余天生驽钝,这个偶翻了许多资料才理解,如果不能理解就看代码吧。多线程中的一个去访问共享资源发现有人使用,于是就在这个资源上面wait,占用者如果使用完了就notify()一下通知下一个等待者可以进来了,notifyAll()就是说在外面等的一起上吧!可是只能服务与一个人,于是大家抢着进去,力气大的自然占便宜。可是在java世界里面JVM说了算。

 有wait和notify的地方一定有synchronize,反过来不成立,wait 和notify不在Thread的势力范围|||

 


public static boolean inUse;
String name;

this.name=n;
while(Resource.inUse==true) 
try...{
this.wait();
}catch(InterruptedException ie)...{
}
try...{
System.out.println("Name:"+getName()+" in use; define Sleep Time: "+sleepTime+",wait 50000 to exit the synchronize block");
System.out.println("Name:"+getName()+" end 5000 sleep . Sleep some time after notify to test if others can end first");
System.out.println("Name:"+getName()+" will Exit the synchronize block");
System.out.println("Name:"+getName()+" End. "+Resource.inUse);
}catch(InterruptedException ie)...{

public String getName()...{
}
}public class ThreadController...{
PrintThread t1,t2,t3,t4;
Resource.inUse=false;
t2 = new PrintThread("2",r);
t4 = new PrintThread("4",r);
t2.start();
t4.start();
//System.exit(0);

public class PrintThread extends Thread...{
Resource rs;
super(id);
}
try...{
rs.out(getName());
System.out.println("Thread :"+getName()+" start to sleep"+sleepTime+"mms");
}catch(InterruptedException ie)...{
}
}

责编:罗莉

发表评论(共0条评论)
请自觉遵守互联网相关政策法规,评论内容只代表网友观点,发表审核后显示!

国家电网校园招聘考试直播课程通关班

  • 讲师:刘萍萍 / 谢楠
  • 课时:160h
  • 价格 4580

特色双名师解密新课程高频考点,送国家电网教材讲义,助力一次通关

配套通关班送国网在线题库一套

课程专业名称
讲师
课时
查看课程

国家电网招聘考试录播视频课程

  • 讲师:崔莹莹 / 刘萍萍
  • 课时:180h
  • 价格 3580

特色解密新课程高频考点,免费学习,助力一次通关

配套全套国网视频课程免费学习

课程专业名称
讲师
课时
查看课程
在线题库
面授课程更多>>
图书商城更多>>
在线报名
  • 报考专业:
    *(必填)
  • 姓名:
    *(必填)
  • 手机号码:
    *(必填)
返回顶部