正在运行的程序就是进程java
单线程不会出现安全问题,可是效率堪忧安全
问什么要继承Thread类:
由于Thread类是线程类,继承至Thread的类,能够为写在run()的代码块提供一个模板。因此run是提供要运行的代码,start()才是开启线程。多线程
线程的内存:
内存会在开辟一个栈区,而后让run()进入到这个栈。栈内存都是线程私有的
异步
public String getName():这是Thread的方法,并非子类的方法
线程
public static Thread currentThread()
code
public void setName(String name)用子类对象去调用这个方法
对象
public void sleep(long second)
==这个方法不能抛出异常,由于父类Thread不能抛出,因此子类也不能抛==继承
public subRunnable implements Runnable{ public void run(){ } } public static void main(String[] args){ SubRunnable sr = new SubRunnable(); Thread th = new Thread(sr); th.start(); }
//匿名内部类是没有子类的 //继承方式 xxxclass extends Thread{public void run()} //直接new Thread,这个匿名内部类就是Thread的子类 new Thread(){ public void run(){ }.start(); } //匿名内部类实现类接口引用 Runnable r = new Runnable(){ public void run(){ }; new Thread(r).start; } new Thread(new Runnable(){ public void run(){ } }).start();
线程池就是用来存储线程的容器,当线程没又试用的时候就会将线程回收可是不关闭线程,能够重复使用这个线程,节省掉反复建立销毁线程的内存开销。sun公司在JKD1.5以后就提供了线程池的API接口
线程池这个容器都是由线程工厂
生产的进程
|--Utils |--Executors public static ExecutorService newFixedThreadPool(int nThreads) ExecutorService:线程池接口 Future<?> submit(Runnable task) Future<?> submit(Callable<?> task) 返回的是接口实际上是说返回的是这个接口的实现类ThreadPoolExecutor,让这个类去实现run
ExecutorService es = Executors.newFixedThreadPool(2); es.submit(new Runnable()); es.shutdown(); //关闭线程池
Runnable
接口存在的问题:
ExecutorService es = Executors.newFixedThreadPool(2); es.submit(new Callable<?>()); //拿到返回值的方式Futere接口 Future<T> f = es.submit(new Callable<T>()); es.shutdown(); //关闭线程池
ExecutorService es = Executors.newFixedThreadPool(2); es.submit(task); es.submit(task); //能够往构造器里面传入参数