线程创建的三种方法
-------------extends Thread 最简单的,但是限制最大----------
public class 线程1 extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("线程1运行啦");
}
}
------------implements Runnable --------
public class 线程2 implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("线程2运行啦");
}
}
------------implements Callable<String> 运行完有返回值--------
public class 线程3 implements Callable<String>{
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
System.out.println("线程3运行啦");
return "宝强宝宝很生气";
}
}
------------启动多线程--------
//继承运行
new 线程1().start();
//实现运行
new Thread(new 线程2()).start();
//有返回值的运行
FutureTask<String> futureTask = new FutureTask<>(new 线程3());
new Thread(futureTask).start();
//得到返回值
String string = futureTask.get();
System.out.println(string);
线程五态
setDaemon(true):设置为后台线程(没有前台线程将结束)
setPriority(Thread.MAX_PRIORITY):设置优先级
join():加入到主线程中,多个线程加入会有先后顺序
sleep(1000):线程睡觉,不释放锁
wait():线程睡觉,释放锁
notify():唤醒队列中的一个线程
notifyAll():唤醒队列中的所有线程
yield():绅士方法
同步(线程安全,避免多个线程争夺资源造成死锁)
http://blog.csdn.net/weixin_35928208/article/details/52278539