获取运行当前方法的线程:
Thread t = Thread.currentThread();//是获取当前方法的线程
System.out.print(“运行当前方法的线程是:”+t);
获取线程信息的相关方法:
long getId();/返回线程的标识符.int getPriority();返回线程的优先级
String getName();//返回该线程的名称.
Thread.state getState();//获取该线程的状态
boolean isAlive();//测试线程是否处于活动状态
boolean isDaemon();//测试线程是否是守护线程
boolean isInterrupted();//测试线程是否已经中断
线程的优先级分为10级(1-10),10最高,线程提供了3个常量来表示:
Thread.MIN_PRIORITY(最低)、Thread.MAX_PRIORITY(最高)、
Thread.NORM_PRIORITY(默认优先级)。
void setPriority(int priority);//分配优先级。理论上优先级越大,线程获得cpu时间片的次数就越多.(线程的时间分配是无法干预的,但是可以通过优先级来控制) //t1.setPriority(Thread.MAX_PRIORITY);
static void sleep(long ms) //线程提供的静态方法sleep可以使运行该方法的线程进入阻塞状态指定毫秒,超时后线程会自动回到Runnable状态。
while(true){
System.out.print(“问问”);
try{
Thread.sleep(1000);//每一秒输出问问一次
}catch(InterruptedException e){
e.printStackTrace();
}
}
线程安全的相关API:
StringBuilder 不是同步的,append();
StringBuffer 是同步的 synchronized append();
vector和Hashtable是同步的(先后次序); ArrayList和HashMap不是同步的
获取线程安全的集合方式:
将集合或者Map转换为安全的
list = Collections.synchronizedList(List);//获取线程安全的List集合
ExecutorService是java提供的用于管理线程池的类
线程池的两个主要作用:
1)控制线程数量
2)重用线程
使用ExecutorService实现线程池:
Executors.newFixedThreadPool(int Threads)//可以用于创建固定线程数量的线程池,里面的线程可以重用
ExecutorService thread=Executors.newFixedThreadPool(2);//创建线程池
thread.execute(runn);//线程池开始执行任务runn(runnable实例)
thread.shutdown();//线程池里面的任务完成后停止
thread.shutdownNow();//线程会立即停止正在运行的任务