MyException - 我的异常网
当前位置:我的异常网» J2SE » 请问关于线程同步的一些见解!多谢!

请问关于线程同步的一些见解!多谢!

www.MyException.Cn  网友分享于:2013-01-29  浏览:5次
请教关于线程同步的一些见解!!谢谢!!
最近在做一个采集系统,想要保持系统的性能所以采用了线程同步的方式,但是出现了一些问题,
如:线程池的管理,线程同步的实现,线程的关闭和怎样让一个线程在执行过程中暂停恢复后又继续执行。
这些都是我碰到的问题,我是刚学不久,
谢谢各位的帮组。

------解决方案--------------------
1:线程池网上可以找到开源的成熟的组件
2:线程同步使用synchronized关键字就可以了
3:线程关闭可以自己使用一个标志,boolean stop;然后通过setStop(boolean stop);来设置停止
4:暂停也和停止差不多,可以设置一个暂停标志,发现标志就调用wait,如果要重新执行就调用notify,并且将标志设置回来
------解决方案--------------------
探讨
1:线程池网上可以找到开源的成熟的组件
2:线程同步使用synchronized关键字就可以了
3:线程关闭可以自己使用一个标志,boolean stop;然后通过setStop(boolean stop);来设置停止
4:暂停也和停止差不多,可以设置一个暂停标志,发现标志就调用wait,如果要重新执行就调用notify,并且将标志设置回来

------解决方案--------------------
1.5的jdk自带线程池
------解决方案--------------------
java多线程四种状态:新建,运行,阻塞,停止。
这些状态必须知道用 sleep(),wait(),join(),notify(),notifyAll()等方法
还有就是同步关键字synchronized中的方法同步和块同步,
还就就是java组相关的东西。
java编程思想有很详细的讲解。
------解决方案--------------------
一、理解多线程

  多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。

  线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信远较进程简单。

  多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。

  多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度,同步等问题,将在以后探讨。

二:在Java中实现多线程

  我们不妨设想,为了创建一个新的线程,我们需要做些什么?很显然,我们必须指明这个线程所要执行的代码,而这就是在Java中实现多线程我们所需要做的一切!

  真是神奇!Java是如何做到这一点的?通过类!作为一个完全面向对象的语言,Java提供了类java.lang.Thread来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程,我们以后的讨论都将围绕这个类进行。

  那么如何提供给 Java 我们要线程执行的代码呢?让我们来看一看 Thread 类。Thread 类最重要的方法是run(),它为Thread类的方法start()所调用,提供我们的线程所要执行的代码。为了指定我们自己的代码,只需要覆盖它!

  方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 run() ,加入线程所要执行的代码即可。下面是一个例子:


  public class MyThread extends Thread 
  { 
  int count= 1, number; 
  public MyThread(int num)
  { 
  number = num; 
  System.out.println
  ("创建线程 " + number); 
  } 
  public void run() { 
  while(true) { 
  System.out.println
  ("线程 " + number + ":计数 " + count); 
  if(++count== 6) return; 
  } 
  } 
  public static void main(String args[])
  { 
  for(int i = 0; 
  i 〈 5; i++) new MyThread(i+1).start(); 
  } 
  }
  

  这种方法简单明了,符合大家的习惯,但是,它也有一个很大的缺点,那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类,这时如果我们又不想建立一个新的类,应该怎么办呢? 

  我们不妨来探索一种新的方法:我们不创建Thread类的子类,而是直接使用它,那么我们只能将我们的方法作为参数传递给 Thread 类的实例,有点类似回调函数。但是 Java 没有指针,我们只能传递一个包含这个方法的类的实例。 

  那么如何限制这个类必须包含这一方法呢?当然是使用接口!(虽然抽象类也可满足,但是需要继承,而我们之所以要采用这种新方法,不就是为了避免继承带来的限制吗?) 

  Java 提供了接口 java.lang.Runnable 来支持这种方法。

  方法二:实现 Runnable 接口 

  Runnable接口只有一个方法run(),我们声明自己的类实现Runnable接 口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。但是Runnable接口并没有任何对线程的支持,我们还必须创建Thread类 的实例,这一点通过Thread类的构造函数public Thread(Runnable target);来实现。下面是一个例子: 


  public class MyThread implements Runnable
  { 
  int count= 1, number; 
  public MyThread(int num)
  { 
  number = num; 
  System.out.println("创建线程 " + number); 
  } 
  public void run()
  { 
  while(true)
  { 
  System.out.println
  ("线程 " + number + ":计数 " + count); 
  if(++count== 6) return; 
  } 
  } 
  public static void main(String args[])
  { 
  for(int i = 0; i 〈 5;

文章评论

做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
代码女神横空出世
代码女神横空出世
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
程序员必看的十大电影
程序员必看的十大电影
程序员的鄙视链
程序员的鄙视链
程序员和编码员之间的区别
程序员和编码员之间的区别
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
Java程序员必看电影
Java程序员必看电影
 程序员的样子
程序员的样子
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
一个程序员的时间管理
一个程序员的时间管理
老程序员的下场
老程序员的下场
漫画:程序员的工作
漫画:程序员的工作
每天工作4小时的程序员
每天工作4小时的程序员
编程语言是女人
编程语言是女人
如何成为一名黑客
如何成为一名黑客
中美印日四国程序员比较
中美印日四国程序员比较
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员都该阅读的书
程序员都该阅读的书
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
10个调试和排错的小建议
10个调试和排错的小建议
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
我是如何打败拖延症的
我是如何打败拖延症的
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
总结2014中国互联网十大段子
总结2014中国互联网十大段子
旅行,写作,编程
旅行,写作,编程
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
那些争议最大的编程观点
那些争议最大的编程观点
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有