多线程:多线程的四种创建方式
extends Thread -->使用继承的方式调用多线程
implements Runnable -->使用多线程需要继承的接口 ,比Thread好用
implements Callable -->比Runnable接口强大的接口 支持返回值,泛型类,异常
ExecutorService x1= Executors.newFixedThreadPool(2);-->创建一个指定大小的线程池
多线程:常用方法
1.xc.start(); -->启动该线程
2.xc.setName("线程1:"); -->给线程起名字
3.Thread.currentThread() -->当前进程
4.Thread.currentThread().setName("主线程:");-->给main主线程命名
5.getNAme(); -->获取当前线程名字
6.Thread.currentThread().getName() -->输出当前线程名称
7.run(); 通常重写好用
阻塞线程的4种方式:
8.xc.join(); -->当i为20的时候只有执行完调用线程 xc的线程的时候才会执行 需要try/catch 环绕 让自己堵塞执行xc线程完成之后在执行自己
9.yield(); -->如果满足此条件释放当前执行权力
10.sleep(500); -->如果满足此条件就让他500秒之后再运行 需要try/catch 环绕
11.this.stop(); -->强制性结束进程
多线程:优先级:
Thread.MAX_PRIORITY -->设置线程优先级为最高
Thread.NORM_PRIORITY -->设置线程优先级为中
Thread.MIN_PRIORITY -->设置线程优先级为最低
输出优先级:
setPriority() -->输入线程优先级: xc2.setPriority()
xc2.getPriority() -->输出线程优先级 xc2.getPriority()
多线程:唤醒
{ -->都是在同步代码块里面操作 让此线程不能执行
1.wait(); -->睡眠此线程
2.wait(long timout)-->睡眠指i定时间后唤醒此线程
3.notify() -->唤醒优先级高的线程
4.notifyAll() -->唤醒所有睡眠线程
* 注此类是在Obgect类中调用的 ,slepp是在Thread中调用的
}
多线程:线程安全
1.Synchronized(this) -->同步锁 用来防止线程不安全问题 如果使用static那调用的就是 当前对象.class
2.ReentrantLock re= new ReentrantLock() --> 类 锁定此方法让该方法进来的只有一个线程
{
re.lock();锁定
re.unlock();解锁方法 需要try环绕
}
多线程:线程池
ExecutorService 和 Executors工具类
ExecutorService 真正的接口 常见子类ThreadPoolExecutor
创建线程池:
ExecutorService x1= Executors.newFixedThreadPool(2);-->创建一个指定大小的线程池
ExecutorService x3= Executors.newCachedThreadPool();-->创建一个可能需要创建的线程池
ExecutorService x4= Executors.newSingleThreadExecutor();-->创建一个只有一个线程的线程池
ExecutorService x5= Executors.newScheduledThreadPool(100);-->创建一个线程池,它可安排在给定延迟后运行命令或者定期执
使用线程池:
x1.execute(Runnable r1); -->执行Runnable接口的线程池
x1.submit(Callable c1);-->开启线程3 execute适应于 Callable接口
x1.shutdown(); -->关闭线程池的连接