线程中的一些基本方法使用

/*
	 * 线程中的方法
	 * sleep()休眠 毫秒为单位
	 * yield()让出处理器时间
	 * join()所有线程等待调用join这个线程结束完了之后再执行
	 * interrupt()不适用于用于停止线程 设计初衷并不是用于停止线程  其中的isInterrupted()判断线程是否终止
	 * 停止线程使用“旗标”停止线程 boolean val=true; while(val){...} val=false;
	 * InterruptedException 异常中断
	 *
	 * //使用object 对象进行同步
	//	private final Object objlock = new Object();
	//	private int count = 10;
	//	@Override
	//	public void run() {
	//		synchronized (objlock) {
	//			while (count < 0) {
	//				try {
	//					// 当条件不满足时 将线程 wait set集合中 进行等待 不在竞争cup资源
	//					objlock.wait();
	//				} catch (InterruptedException e) {
	//					// TODO Auto-generated catch block
	//					e.printStackTrace();
	//				}
	//			}
	//			System.out.println(Thread.currentThread().getName() + "="
	//					+ (count--));
	//			// 唤醒当前objlock所有被等待的线程
	//			objlock.notifyAll();
	//		}
	//	}
	 *
	 * wait()/notify()/notifyAll() 都属于obj对象 (调用不是在同一次 同一个线程中进行操作的)
	 * wait() 在某些情况不满足下 将线程放如waitset中 线程等待集合
	 * notify() 唤醒等待中的一条线程
	 * notifyAll() 唤醒当前等待上的所有线程
	 *
	 * synchronized 作用域:
	 *
	 * 1、 在某个实例对象中 synchronized getMethod(){}可以阻止多个线程同时访问这个方法(
	 *  如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,
	 *  其它线程不能同时访问这个对象中任何一个synchronized方法
	 *  )同一个对象
	 *
	 * 2、每个实例对象 的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时访问相同类的另一个对象实例中的synchronized方法;
	 *
	 * 3、是某个类的范围,synchronized static getMethod{}防止多个线程同时访问这个类中的synchronized static 方法。它可以对类的所有对象实例起作用。
	 *
	 *
	 */
	

更多关于synchronized     http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html

时间: 2024-11-03 21:54:55

线程中的一些基本方法使用的相关文章

Android在非UI线程中更新UI的方法

1.使用Thread+Handler实现非UI线程更新UI界面 private MyHandler mHandler = new MyHandler(); ...... mHandler.sendResult(MyHandler.UPDATE_VIEW, null); ...... private class MyHandler extends Handler{ private static final int UPDATE_VIEW = 0; @Override public void han

android子线程中更新UI的方法

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 参考:Android子线程 方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //

业务代码中(java class)中如何实现多线程,并且将子线程中的值随方法返回返回值

转载自http://bbs.csdn.net/topics/390731832 问题: public static String getAddress(final InputStream inputStream, final String mobile) { new Thread() { public void run() { try { Log.i(TAG, "inputStream: " + inputStream.available()); String soap = readS

Java线程中run和start方法的区别

http://bbs.csdn.net/topics/350206340 Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用:start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程: package com.ljq.test; public class ThreadTest { /** * 观察直接调用run()和用start()启动一个线程的差别 * * @

多线程(2) — 线程中一些常用的方法和关键字

1.start()和run() start()方法是是开启线程的方法,这个方法执行后,一个线程才真正的进入RUNNABLE状态.run()方法是线程中具体执行的业务活动,一般都要重写run()方法. 2.stop() stop()方法在结束线程时,会直接终止线程,并立即释放这个线程所持有的锁,而锁恰恰是用来维护对象一致性的.例如写线程正在写到一半,线程被强行终止,对象就会被写坏了,同时锁已经释放,其他对象读到这个对象是写坏了的对象. 3.interrupt().isInterrupted().i

java 线程中 stop()和 suspend()方法为何不推荐使用?

用 synchronized 关键字修饰同步方法: 反对使用 stop(),是因为它不安全.它会解除由线程获取的所有锁定,而 且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它 们.结果很难检查出真正的问题所在: suspend()方法容易发生死锁.调用 suspend()的时候,目标线程会停下来, 但却仍然持有在这之前获得的锁定.此时,其他任何线程都不能访问锁定的资源 , 除非被"挂起"的线程恢复运行.对任何线程来说,如果它们想恢复目标线程, 同时又试图使用任何一个

在C#线程中的使用匿名方法

用线程写一个简单的DEMO:在一个WinForm中放一个命名为lblNumber的Label控件,每隔一秒刷新一下Label的Text,让它显示当前的秒数,从0显示到99. 如果用Timer那么拖来两个控件,敲几行代码,2分钟搞定.这里主要是做Demo说明匿名方法的用法,因此稍微麻烦一些:  private void MainForm_Load(object sender, EventArgs e)         {             Thread t = new Thread(() =

Java线程中yield与join方法的区别

摘要:有人推崇产品,有人推崇运营,也有人推崇战略-到底该推崇什么?李智勇系统地分析了这三者之间的思路,并引用黑格尔的一句话,给出了自己的看法:在尺度中已经蕴含本质,这在产品.运营.战略的侧重上体现的非常好. 视野不拉升或者认知不深入时,就容易在盲人摸象层面上反复,看到微信火了,那就产品最重要,看到阿里火了,那就平台最重要.实际上一个比较显然的事实是,没有锥子一样的产品,那你就火不起来:不能从产品升级为平台,那就很可能活不下去.当然,有些人会说平台也是一种产品,但就和人与猴子都是灵长目,实际上仍是

Android中Handler的使用方法及实例(基础回顾)

Handler使用例1 这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了. 软件界面如下: 实验主要部分代码和注释: MainActivity.java: 1 package com.ex