标签:状态 调用 基础知识 线程 new 方法 public
线程创建
4中创建方式:
- 继承 Thread 类,本质是 Runable 的实现类
- 实现 Runnable 接口,重写 run() 方法,无返回值,不可抛异常,异步执行,不阻塞主方法
public interface Runnable {
public abstract void run();
}
- 实现 Callable 接口,重写 call() 方法,有返回值,可抛异常,调用Futrue接口的get()方法后,阻塞主方法,顺序执行
public interface Callable<V> {
V call() throws Exception;
}
简单代码与执行结果
public class TestC implements Callable<String> {
public static void main(String[] args) throws Exception {
TestC testC = new TestC();
System.out.println("111");
FutureTask<String> task = new FutureTask<>(testC);
new Thread(task).start();
//调用get()方法阻塞主线程
System.out.println(task.get());
System.out.println("222");
}
@Override
public String call() throws Exception {
Thread.sleep(1000);
return "睡眠:1S";
}
}
执行结果 :
111
睡眠:1S
222
- 线程池创建(算是吧,网上都说算。还没有看具体的创建方式 -_- )
常用方法
- sleep()
意思就是睡眠。让当前线程放弃资源,让给其它线程去执行。睡眠时间由你来定,时间一到重新去争夺资源。 - yield()
意思 放弃资源。让当前线程放弃资源,然后与其它线程重新争夺资源。可能重新抢到,可能其它线程抢到。 - join()
意思 加入其它线程。停止当前线程 t1, 执行指定线程t2,t2 执行完再执行t1。用于顺序执行。
自己 join 自己,没有意义
线程状态
线程状态:新建状态,就绪状态、运行状态、结束状态、TimeWaiting 等待状态、Waiting 等待状态、阻塞状态
- new 一个线程,在没有调用 start()前,线程处于 new状态
- 调用 start()方法后,存在两个状态
2.1 线程获取到资源,线程处于运行状态。(调用 yield方法,状态由运行到就绪)
2.2 线程没有获取到资源,线程会进行等待队列,处于就绪状态。 (获取资源后,状态由就绪到运行) - 运行情况下的状态变迁
- 阻塞状态,当线程没有获取到锁情况下
- 进行阻塞队列,(获取到锁后,线程状态由阻塞 到 就绪)
- 调用 thread.sleep() 方法后,进行 Waiting等待状态。(使用 notify()方法,线程状态由 Waiting等待 到 运行状态。)
- 调用 thread.sleep(1000) 方法后,进行 TimeWaiting等待状态。(使用 notify()方法,线程状态由 TimeWaiting等待 到 运行状态。)、
- 运行结束,状态由运行到结束状态
标签:状态,调用,基础知识,线程,new,方法,public 来源: https://www.cnblogs.com/zz-1q/p/16377980.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。