黑马程序员_线程(3) 线程定时器&ThreadLoad&原子性操作

------- android培训 java培训 、期待与您交流! ----------
一.线程定时器
eg:
package com.it;

import java.util.*;
public class TraditionalTimer {
	
	private static int count = 0;
	@SuppressWarnings("deprecation")
	public static void main(String[] args){
		
		class MyTimer extends TimerTask{
			@Override
			public void run() {
				count = (count+1)%2;
				System.out.println("bomning!");
			    new Timer().schedule(new MyTimer(),2000+2000*count);
		 }
	}
		
	new Timer().schedule(new MyTimer(), 2000);// 每隔2秒调度与4秒调度		
       while(true){
    	   System.out.println(new Date().getSeconds());
    	   try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
       }
	}
}


二.线程共享变量ThreadLoad
eg:
package com.it;
import java.io.UnsupportedEncodingException;
/***
 *  线程范围共享数据 缓存 HashMap 但API 封装这样的工具具体实现类 Threadlocal
 */
import java.util.Random;

public class ThreadLocalDemo {
	
  static class Person{
    	private int age;
    	private String student;
    	private static Person intances = null;
    	private static ThreadLocal<Person> threadlocal = new ThreadLocal<Person>();
    	private Person(){
    		
    	}
    	public static Person getInstance(){
    		intances = threadlocal.get();
    		if(intances==null){
    			if(intances==null){
    				synchronized(Person.class){
    					intances = new Person();
    					threadlocal.set(intances);
    				}
    			}
    		}
  		  return intances;
    	}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public String getStudent() {
			return student;
		}
		public void setStudent(String student) {
			this.student = student;
		}
		public String toString(){
			return this.getAge()+";"+this.getStudent();
		}
    }
	//static ThreadLocal<Person> threadLocal = new ThreadLocal<Person>();
    class A{
    	 public void get(){
         Person person = Person.getInstance();
    	 System.out.println("A from "+Thread.currentThread().getName()+" get data "+person.getAge());
    	}   
    }
    class B{ 	
    	 public void get(){
         Person person = Person.getInstance();
         System.out.println("B from "+Thread.currentThread().getName()+" get data "+person.getStudent());
    	}
    }
   class CreateHexToString{
	   public String generiationHex(int HexLen){
		   StringBuilder buff = new StringBuilder();
		   Random random = new Random();
		   int hightpos,lowpos;
		   byte[] b = new byte[2];
		   for(int i=0;i<HexLen;i++){
			   hightpos = (176+Math.abs(random.nextInt(39)));
			   lowpos = (161+Math.abs(random.nextInt(93)));
			   b[0] = (new Integer(hightpos).byteValue());
			   b[1] = (new Integer(lowpos).byteValue());
			   try {
				buff.append(new String(b,"GBK"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}	   
		   }
		   return buff.toString();
	   }
   } 
	public static void main(String[] args) {
		for(int i=0;i<10;i++){
		new Thread(new Runnable(){

			@Override
			public void run() {
			  int age = new Random().nextInt(10)+20;
			  String name = new ThreadLocalDemo().new CreateHexToString().generiationHex(2);
			  Person person= Person.getInstance();
			  person.setAge(age);
			  person.setStudent(name);
			  System.out.println(Thread.currentThread().getName()+" get data "+person);
			  //threadLocal.set(person);  
			  new ThreadLocalDemo().new A().get();
			  new ThreadLocalDemo().new B().get();
			}		
	 	}).start();
	  }
	}
}


三.Thread原子性操作
eg:
package com.it;

public class MultiThreadShareData {

	class ShareData{
		private int j;
		protected ShareData(int j){
			this.j = j;
		}
		public synchronized void increment(){
			System.out.println(Thread.currentThread().getName()+" ::: "+(++j));
		}
		public synchronized void decrement(){
			System.out.println(Thread.currentThread().getName()+" ::: "+(--j));
		}
		
	}
	
	class Incr implements Runnable{
       private ShareData share;
       protected Incr(ShareData share){
    	   this.share = share;
       }
		@Override
		public void run() {
			share.increment();
			
		}
		
	}
	class Decr implements Runnable{
       private ShareData share;
       protected Decr(ShareData share){
    	   this.share = share;   	   
       }
		@Override
		public void run() {
			
			share.decrement();
		}
		
	}
	public static void main(String[] args) {
		final ShareData share = new MultiThreadShareData().new ShareData(100);
		new Thread(new MultiThreadShareData().new Incr(share)).start();
		new Thread(new MultiThreadShareData().new Decr(share)).start();
		new Thread(new Runnable(){

			@Override
			public void run() {
				share.increment();
				
			}
			
		}).start();
		
		new Thread(new Runnable(){

			@Override
			public void run() {
				
				share.decrement();
			}
			
		}).start();		
	}

}
也可以用JDK1.5并发库的java.util.concurrent.atomic包 完成原子性操作


-------android培训java培训、期待与您交流! ----------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值