首页 > 编程语言 > 详细

java-初识多线程

时间:2019-05-06 19:43:29      阅读:128      评论:0      收藏:0      [点我收藏+]

概要:

一:线程状态

(1)新生状态-》创建线程对象然后实现start()方法
(2)就绪状态
(3)运行状态-》cpu调度
(4)阻塞状态
(5)死亡状态

二:停止线程

1.自然终止:线程体正常运行完毕
2.外部干涉:
1)线程类中定义线程体的标识
2)线程体使用该标识
3)提供对外的方法改变该标识
4)外部根据条件调用该方法即可

三:阻塞

1.join:合并线程,Y.join(),则先执行Y对象里面的线程体
2.Thread.yield():暂停线程,当前的方法体
3.Thread.sleep():睡眠,模拟延时,但有可能出现数据异常,资源冲突

四:线程基本信息

 isAlive():判断线程是否活着,是否未终止
 getPriority():获取线程的优先级数据,优先级代表的是概率,并非绝对的先后顺序
 setPriority():设置线程的优先级
 setName():给线程取名字
 getName():获取线程名字
 currentThread():获取当前正在运行的线程对象,也就是取得自己本身

五:线程同步(线程并发)

 synchronized->同步
 (1)同步块:
 synchronized(引用类型 || this || 类.class){}
 (2)同步方法:
 synchronized 方法名(){}
 
  多个线程访问同一份资源,确保资源安全->线程安全
  线程安全则效率低,反之


上代码了解一下:

(简单利用静态代理模式)

1.具体角色:

 

 1 package com.test;
 2 /*使用Runnable创建线程
 3  * 1.使用静态代理模式实现启动多线程
 4  * (1)创建真实角色
 5  * (2)创建代理角色
 6 */
 7 public  class Singer implements Runnable {
 8 
 9     @Override
10     public void run() {
11         System.out.println("歌手线程执行->歌手曹操准备上台唱歌。。");
12     }
13 }

 

2.代理角色:保持对具体角色的引用

 1 package com.test;
 2 
 3 public class Agent implements Runnable{
 4     Singer singer=new Singer();
 5     Thread t1=new Thread(singer);
 6     public Agent(Singer singer) {
 7         super();
 8         this.singer = singer;
 9     }
10     private void before() {
11         System.out.println("代理员线程执行->代理员已经准备好台前工作,歌手就绪!");
12     }
13     private void after() {
14         System.out.println("代理员线程执行->代理员已经收拾完场地,护送歌手离开!");
15     }
16 
17     @Override
18     public void run() {
19         System.out.println("歌手线程未启动:"+t1.isAlive());
20         before();
21         t1.start();    
22         t1.setName("歌手线程");
23         System.out.println("当前线程为:"+t1.currentThread());
24         System.out.println("当前线程名称:"+t1.getName());
25         System.out.println("歌手线程启动:"+t1.isAlive());
26         //这里存在多线程运行的延时,即代理员的线程可能运行在歌手的线程前面
27         after();
28     }
29 }

3.场景模拟:

 1 package com.test;
 2 /*
 3  * 场景模拟:实现多线程的启动
 4  */
 5 public class Client {
 6 
 7     public static void main(String[] args) throws InterruptedException {
 8         //具体角色
 9         Singer singer=new Singer();
10         //代理角色
11         Agent ag=new Agent(singer);
12         Thread p2=new Thread(ag);
13         //启动线程
14         p2.start();
15     }
16 }

效果截图:

技术分享图片

ps:文章仅作学习了解,如有不对之处欢迎大佬指正。

 

java-初识多线程

原文:https://www.cnblogs.com/weekstart/p/10821534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!