没有合适的资源?快使用搜索试试~ 我知道了~
day17 【线程、同步】-笔记1
需积分: 0 0 下载量 126 浏览量
2022-08-04
12:12:39
上传
评论
收藏 984KB PDF 举报
温馨提示
试读
16页
第一章 线程1.1 多线程原理昨天的时候我们已经写过一版多线程的代码,很多同学对原理不是很清楚,那么我们今天先画个多线程执行时序图来体现一下多线程程序的执行流程
资源详情
资源评论
资源推荐
day06
【线程、同步】
主要内容
线程
同步
线程状态
教学目标
能够描述Java中多线程运行原理
能够使用继承类的方式创建多线程
能够使用实现接口的方式创建多线程
能够说出实现接口方式的好处
能够解释安全问题的出现的原因
能够使用同步代码块解决线程安全问题
能够使用同步方法解决线程安全问题
能够说出线程6个状态的名称
第一章
线程
1.1
多线程原理
昨天的时候我们已经写过一版多线程的代码,很多同学对原理不是很清楚,那么我们今天先画个多线程执行时序图
来体现一下多线程程序的执行流程。
代码如下:
自定义线程类:
publicclassMyThreadextendsThread{
/*
*利用继承中的特点
*将线程名称传递进行设置
*/
publicMyThread(Stringname){
super(name);
}
/*
*重写run方法
*定义线程要执行的代码
*/
publicvoidrun(){
for(inti=0;i<20;i++){
//getName()方法来自父亲
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
测试类:
流程图:
//getName()方法来自父亲
System.out.println(getName()+i);
}
}
}
publicclassDemo{
publicstaticvoidmain(String[]args){
System.out.println("这里是main线程");
MyThreadmt=newMyThread("小强");
mt.start();//开启了一个新的线程
for(inti=0;i<20;i++){
System.out.println("旺财:"+i);
}
}
}
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
程序启动运行
main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建。随着调用mt的对象的
start方法,另外一个新的线程也启动了,这样,整个应用就在多线程下运行。
通过这张图我们可以很清晰的看到多线程的执行流程,那么为什么可以完成并发执行呢?我们再来讲一讲原理。
多线程执行时,到底在内存中是如何运行的呢?以上个程序为例,进行图解说明:
多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间。进行方法的压栈和弹栈。
当执行线程的任务结束了,线程自动在栈内存中释放了。但是当所有的执行线程都结束了,那么进程就结束了。
1.2 Thread
类
在上一天内容中我们已经可以完成最基本的线程开启,那么在我们完成操作过程中用到了 java.lang.Thread
类,
API中该类中定义了有关线程的一些方法,具体如下:
构造方法:
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
publicThread()
:分配一个新的线程对象。
publicThread(Stringname)
:分配一个指定名字的新的线程对象。
publicThread(Runnabletarget)
:分配一个带有指定目标新的线程对象。
publicThread(Runnabletarget,Stringname)
:分配一个带有指定目标新的线程对象并指定名字。
常用方法:
publicStringgetName()
:获取当前线程名称。
publicvoidstart()
:导致此线程开始执行; Java虚拟机调用此线程的run方法。
publicvoidrun()
:此线程要执行的任务在此处定义代码。
publicstaticvoidsleep(longmillis)
:使当前正在执行的线程以指定的毫秒数暂停(暂时停止执行)。
publicstaticThreadcurrentThread()
:返回对当前正在执行的线程对象的引用。
翻阅API后得知创建线程的方式总共有两种,一种是继承Thread类方式,一种是实现Runnable接口方式,方式一我
们上一天已经完成,接下来讲解方式二实现的方式。
1.3
创建线程方式二
采用 java.lang.Runnable
也是非常常见的一种,我们只需要重写run方法即可。
步骤如下:
1. 定义Runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
2. 创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正
的线程对象。
3. 调用线程对象的start()方法来启动线程。
代码如下:
publicclassMyRunnableimplementsRunnable{
@Override
publicvoidrun(){
for(inti=0;i<20;i++){
System.out.println(Thread.currentThread().getName()+""+i);
}
}
}
publicclassDemo{
publicstaticvoidmain(String[]args){
//创建自定义类对象线程任务对象
MyRunnablemr=newMyRunnable();
//创建线程对象
Threadt=newThread(mr,"小强");
t.start();
for(inti=0;i<20;i++){
System.out.println("旺财"+i);
}
}
}
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
剩余15页未读,继续阅读
半清斋
- 粉丝: 54
- 资源: 322
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0