import javax.xml.stream.events.StartDocument;publicclassTestSynchronized{publicstaticvoidmain(String[] args){// TODO Auto-generated method stubTestSynchronized test =newTestSynchronized();test.init();}voidinit(){final Outputer outputer =newOutputer();newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubwhile(true){try{Thread.sleep(10);}catch(Exception e){// TODO: handle exceptione.printStackTrace();}outputer.Output("wangyuyuyuyuyuyuyuyu");}}}){}.start();newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubwhile(true){try{Thread.sleep(10);}catch(Exception e){// TODO: handle exceptione.printStackTrace();}outputer.Output("zhouzhanzhaozhaozhaozhao");}}}){}.start();}classOutputer{final static String lockKey ="lock";//定义输出函数//第一种方式,提供某个锁publicvoidOutput(String name){int len = name.length();synchronized (lockKey){for(int i =0; i < len; i++){System.out.print(name.charAt(i));}System.out.println();}}//第二种方式,锁住自己publicvoidOutput1(String name){int len = name.length();synchronized (this){//也可以用Outputer.classfor(int i =0; i < len; i++){System.out.print(name.charAt(i));}System.out.println();}}//第三种方式,函数前面加关键字synchronizedpublic synchronized voidOutput2(String name){int len = name.length();for(int i =0; i < len; i++){System.out.print(name.charAt(i));}System.out.println();}}}
定时器Timer
import java.util.Timer;
import java.util.TimerTask;publicclassTimerTest{publicstaticvoidmain(String[] args){newTimer().schedule(newTimerTask(){@Overridepublicvoidrun(){// TODO Auto-generated method stubSystem.out.println("boom");}},3000);}}
HashMap存储线程
import java.util.HashMap;
import java.util.Map;
import java.util.Random;publicclassTestThreadMap{privatestatic HashMap<Thread, Integer> map =new HashMap<Thread, Integer>();publicstaticvoidmain(String[] args){//TestThreadMap testThreadMap = new TestThreadMap();for(int i =0; i <2; i++){newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubint data =newRandom().nextInt();map.put(Thread.currentThread(), data);newA().Get();newB().Get();}}){}.start();}}staticclassA{publicvoidGet(){int data = map.get(Thread.currentThread());System.out.println("A from "+ Thread.currentThread().getName()+" get data "+ data);}}staticclassB{publicvoidGet(){int data = map.get(Thread.currentThread());System.out.println("B from "+ Thread.currentThread().getName()+" get data "+ data);}}}
ThreadLocal类似HashMap存储线程
import java.util.HashMap;
import java.util.Map;
import java.util.Random;publicclassTestThreadMap{privatestatic HashMap<Thread, Integer> map =new HashMap<Thread, Integer>();publicstaticvoidmain(String[] args){//TestThreadMap testThreadMap = new TestThreadMap();for(int i =0; i <2; i++){newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubint data =newRandom().nextInt();map.put(Thread.currentThread(), data);newA().Get();newB().Get();}}){}.start();}}staticclassA{publicvoidGet(){int data = map.get(Thread.currentThread());System.out.println("A from "+ Thread.currentThread().getName()+" get data "+ data);}}staticclassB{publicvoidGet(){int data = map.get(Thread.currentThread());System.out.println("B from "+ Thread.currentThread().getName()+" get data "+ data);}}}
import java.util.Random;publicclassTestThreadlocal_2{publicstaticvoidmain(String[] args){// TODO Auto-generated method stubfor(int i =0; i <2; i++){newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubint data =newRandom().nextInt();MyData.getInstance().setName("myData"+ data);MyData.getInstance().setAge(data);newA().Get();newB().Get();}}){}.start();}}staticclassA{publicvoidGet(){MyData data = MyData.getInstance();System.out.println("A from "+ Thread.currentThread().getName()+" get data "+ data.getName()+", "+ data.getAge());}}staticclassB{publicvoidGet(){MyData data = MyData.getInstance();System.out.println("B from "+ Thread.currentThread().getName()+" get data "+ data.getName()+", "+ data.getAge());}}}classMyData{String name;int age;publicstatic/*synchronized*/ MyData getInstance(){MyData instance = threadLocal.get();if(instance == null){//不存在就创建一个与本线程有关的实例对象instance =newMyData();threadLocal.set(instance);}return instance;}//private static MyData instance = null;privatestatic ThreadLocal<MyData> threadLocal =new ThreadLocal<MyData>();public String getName(){return name;}publicvoidsetName(String name){this.name = name;}publicintgetAge(){return age;}publicvoidsetAge(int age){this.age = age;}}
线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;publicclassTestThreadPool{publicstaticvoidmain(String[] args){//固定大小的线程池ExecutorService threadPool = Executors.newFixedThreadPool(3);//缓存线程池,当线程不够用时会自动增加,多了会自动减少//ExecutorService threadPool = Executors.newCachedThreadPool();//单一线程池,线程死了可以重新启动//ExecutorService threadPool = Executors.newSingleThreadExecutor();for(int i =1; i <=10; i++){final int taskid = i;threadPool.execute(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubfor(int j =1; j <=10; j++){System.out.println(Thread.currentThread().getName()+" is loop of "+ j +" for task of "+ taskid);}}});}System.out.println("all have finished");threadPool.shutdown();//线程池里没有任务了,线程池才关闭,等10个任务都完成后才关闭//threadPool.shutdownNow(); //一个线程完成之后立马关闭,此时只完成了3个任务/*//定时器线程池Executors.newScheduledThreadPool(3).schedule(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("booming");}}, 6,TimeUnit.SECONDS); //多长时间后执行任务
*/ Executors.newScheduledThreadPool(3).scheduleAtFixedRate(//以固定频率执行任务newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubSystem.out.println("booming");}},6,//初始时间2,//间隔时间TimeUnit.SECONDS);}}
锁Lock
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;import javax.xml.stream.events.StartDocument;publicclassTestLock{publicstaticvoidmain(String[] args){// TODO Auto-generated method stubTestLock test =newTestLock();test.init();}voidinit(){final Outputer outputer =newOutputer();newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubwhile(true){try{Thread.sleep(10);}catch(Exception e){// TODO: handle exceptione.printStackTrace();}outputer.Output("wangyuyuyuyuyuyuyuyu");}}}){}.start();newThread(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubwhile(true){try{Thread.sleep(10);}catch(Exception e){// TODO: handle exceptione.printStackTrace();}outputer.Output("zhouzhanzhaozhaozhaozhao");}}}){}.start();}classOutputer{Lock lock =newReentrantLock();//锁publicvoidOutput(String name){int len = name.length();lock.lock();try{for(int i =0; i < len; i++){System.out.print(name.charAt(i));}System.out.println("");} finally{// TODO: handle exceptionlock.unlock();}}}}
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;publicclassTestCyclicBarrier{//多个线程彼此等待,集合后再运行publicstaticvoidmain(String[] args){// TODO Auto-generated method stub//创建线程池和CyclicBarrier,同时运行多个线程,调用awaitExecutorService es = Executors.newCachedThreadPool();final CyclicBarrier cb =newCyclicBarrier(3);for(int i =0; i <3; i++){es.execute(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubtry{Thread.sleep((int)(Math.random()*1000));System.out.println("线程"+ Thread.currentThread().getName()+"到达集合点1");System.out.println("当前有"+(cb.getNumberWaiting()+1)+"人在等待");cb.await();Thread.sleep((int)(Math.random()*1000));System.out.println("线程"+ Thread.currentThread().getName()+"到达集合点2");System.out.println("当前有"+(cb.getNumberWaiting()+1)+"人在等待");cb.await();Thread.sleep((int)(Math.random()*1000));System.out.println("线程"+ Thread.currentThread().getName()+"到达集合点3");System.out.println("当前有"+(cb.getNumberWaiting()+1)+"人在等待");cb.await();}catch(Exception e){// TODO: handle exceptione.printStackTrace();}}});}es.shutdown();}}
CountDownLatch(类似倒计时计数器,当计数减为0时,所有等待者才开始执行)
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;publicclassTestCountDownLatch{//类似倒计时计数器,当计数减为0的时候,所有等待者才开始执行publicstaticvoidmain(String[] args){// TODO Auto-generated method stub//创建两个计数器,一个为1,一个为3,代表一个裁判员,三个运动员,裁判员在未下达命令前运动员等待,下达命令后才执行//等三个运动员都到达终点后,裁判员才公布成绩ExecutorService es = Executors.newCachedThreadPool();CountDownLatch cdOrder =newCountDownLatch(1);CountDownLatch cdAnswer =newCountDownLatch(3);for(int i =0; i <3; i++){final int id = i;es.execute(newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubtry{System.out.println("运动员"+ id +"正准备接受命令");cdOrder.await();System.out.println("运动员"+ id +"接受到命令");Thread.sleep((int)(Math.random()*5000));System.out.println("运动员"+ id +"到达终点");cdAnswer.countDown();}catch(Exception e){// TODO: handle exceptione.printStackTrace();}}});}try{Thread.sleep(1000);System.out.println("裁判员发出指令");cdOrder.countDown();System.out.println("裁判员等待所有运动员到达终点");cdAnswer.await();System.out.println("裁判员公布成绩");}catch(Exception e){// TODO: handle exception}}}
C#基础知识
同一命名空间下的两个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace HelloWorld
{class A{private int a;public A(int x) { a x; }public void show() { Console.WriteL…
欢迎来到Azure Show!Azure ShowAzure Show 是由微软最有价值专家、微软技术社区区域总监卢建晖和微软开发者关系PM朱兴亮共同发起的一个关于微软Azure、开源技术、还有技术社区相关的线上节目。每期节目由MVP面对面、开源故事、从零开始以及Azure101组成,邀请微软技…
Coin Test时间限制:3000 ms | 内存限制:65535 KB难度:1描述As is known to all,if you throw a coin up and let it droped on the desk there are usually three results. Yes,just believe what I say ~it can be the right side or the …