JAVA学习第十二天

xiaoxiao2021-03-01  15

三.常用方法: 1.Sleep(long milis):在指定的毫秒内让当前正在执行的线程休眠(暂停执行)。 2.join();指等待t线程终止 3.yield();暂停当前正在执行的现场能对象,并执行其他线程 4.interrupt();中断某个线程,这种结束方法比较粗暴,如果t线程打开了某个资源还没有来得及关闭也就是run方法还没有执行完就强制结束线程,会导致资源无法关闭 四.多线程实现方式 1.继承Thread类 2.实现Runable接口 3.通过callable和Future创建线程 (1)创建callable接口和实现类,并实现call()方法,该call()方法将作为线程执行体,并有返回值(类似于run()方法) (2)创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该Futuretask对象封装了该Callable对象的call()方法的返回值 (3)使用futuretask对象作为thread对象 target创建并启动新线程 (4)调用futuretask对象的get()方法来获取子线程执行结束后的返回值 4.TimerTask:定时器 1.2.3.4线程调用方法 五.线程的几个主要概念: 1.线程同步:两个或多个线程共同完成同一个事,若A线程进入操作室,其他线程则会进入等待状态. 2.线程安全:如果代码在多线程下执行何在单线程下执行永远都能获得一样的结果,,那么代码就是安全的。 (1).不可变:String、integer、long这些,都是final类型的类(常量),任何一个线程都改变不了他们的值, 3.线程死锁:任何多线程应用程序都有可能存在死锁风险,当一组进程或线程中每一个都在等待一个只有改组改组中另外一个进程才能引起的事件时,我们就说这组进程或线程死锁了。(挂起是最容易死锁的) 4.线程间通信 六.多线程中的常见问题: 1.Run()和start()之间的区别   答:只有调用了start()方法,才会表现出多线程的特性,不同线程的run()方法里面的代码交替执行。如果只是调用run()方法,则代码还是同步执行的。必须等一个线程的run()方法的全部代码执行完毕之后,另外一个线程才可以继续执行自己的run()方法. 2.Runable和callable接口的区别:     答:Runable接口中的run()方法无返回值;callable接口中的call()方法是有返回值的,是一个泛型,和Future、FutureTask配合可以获取异步执行的结果。由于多线程充满了未知性,callable+future和FutureTask可以获取线程执行结果 3.为什么使用线程锁:     答:在处理大量短小任务时,如果不使用线程池,则每次new T和热爱的新建对象性能差;线程池方便重复利用. 异常等级:

Executor:一个接口,定义了一个接受runnable对象的方法executor,其方法签名为executor(runnable command) ExecutorService:是一个比executor使用更广泛的子类接口,其提供了生命周期管理的方法,以及可跟踪一个或多个异步任务执行状况返回future的方法 AbstractExecutorService:ExecutorService执行方法的默认实现 ScheduledExecutorService: ScheduledthreadPoolExecutor:ScheduledExecutorService的实现,一个可定调度任务的线程池 ThreadPoolExecutor:线程池,可以通过调用executors以下静态工厂方法来创建线程池并返回一个executorService对象 

常用方法:1.public void shutdown();关闭线程池;必须等原任务完毕 3.public void shutdownNow();关闭线程池  不等原任务结束,可能会报异常 4.Public void execute();向线程池提交任务. 5.Public long getTaskCount();获得总线程数 6.Public long getCompletedTaskCount();获取执行后的线程 线程池的生命周期:运行、关闭、终止三种状态,线程池初始化运行时处于运行状态,调用shutdown方法进入关闭状态,调用shutdownNow方法进入终止状态。建议使用shutdown

    

 

转载请注明原文地址: https://www.6miu.com/read-3649955.html

最新回复(0)