没有合适的资源?快使用搜索试试~ 我知道了~
java从入门到精通学习笔记-Lesson5(多线程).pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 102 浏览量
2021-11-23
15:56:04
上传
评论
收藏 41KB PDF 举报
温馨提示
试读
11页
java从入门到精通学习笔记-Lesson5(多线程).pdf
资源推荐
资源详情
资源评论
程序、进程和线程
程序是计算机指令的集合,它以文件的形式存储在磁盘上。
进程:是一个程序在其自身的地址空间中的一次执行活动。
进程是资源申请、 调度和独立运行的单位, 因此,它使用系统中的运行资源;
而程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,
因此,它不占用系统的运行资源。
线程:是进程中的一个单一的连续控制流程。一个进程可以拥有多个线程。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负
责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程
共享一个存储空间,这使得线程间的通信远较进程简单。
Java对多线程的支持
Java在语言级提供了对多线程程序设计的支持。
实现多线程程序的两种方式:
(1) 从 Thread类继承;
(2) 实现 Runnable接口。
class MutiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.start(); //启动 run()方法
System.out.println("main: "+Thread.currentThread().getName());
}
}
class MyThread extends Thread
{
public void run() //启动线程的入口方法
{
System.out.println(getName());
}
}
运行结果为 : main: main (其中的 main 为运行 main()方法的线程名称 .)
Thread-0 (MyThread 类中当前运行的线程名称 .)
为何先打印出的是 main()方法所在的线程的名字呢?这是因为线程在运行
的时候操作系统会给它分配时间片,当调用 start()方法的时候, main()方法所在
的时间片还没有到期, 所以它继续往下运行, 打印出它所在的线程的名字。 接下
来 main()方法所在的时间片到期了,轮到 mt 所代表的线程运行,然后 java 虚拟
机调用 run()方法,打印出对应的线程的名字即 Thread-0。为了更好的看到线程
的切换,对以上程序进行修改如下:
class MutiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.start(); //启动 run()方法
while(true)
System.out.println("main: "+Thread.currentThread().getName());
}
}
class MyThread extends Thread
{
public void run() //启动线程的入口方法
{
while(true)
System.out.println(getName());
}
}
可以将 mt 所在的 线程设置 为后台线程 ,这要用 到 Thread 类 中的方法
setDaemon()方法,但它必须要在这个线程启动之前被调用。 main()方法所在
的线程是一个非后台线程,当 main()方法所在的线程中止后,后台的线程会
跟着中止。
class MutiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.setDaemon(true); //将 mt 所在的线程设置为后台线程 .
mt.start();
int index=0;
while(true)
{
if(index++==100)
break;
System.out.println("main: "+Thread.currentThread().getName());
}
}
}
class MyThread extends Thread
{
public void run() //启动线程的入口方法
{
while(true)
System.out.println(getName());
}
}
一个正在执行的线程可以放弃正执行的权利,让另外一个线程开始执行,可
以通过 Thread类中的 yield()方法,它可以使正在执行的线程对象临时暂停,
允许别的线程执行,它是静态的方法。
class MutiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
mt.setDaemon(true); //将 mt 所在的线程设置为后台线程 .
mt.start();
int index=0;
while(true)
{
if(index++==1000)
break;
System.out.println("main: "+Thread.currentThread().getName());
}
}
}
class MyThread extends Thread
{
public void run() //启动线程的入口方法
{
while(true)
{
System.out.println(getName());
yield();
}
}
}
Java中每一个线程都有一个优先级, 我们可以通过 Thread类中的 getPriority()
和 setPriority()方法来分别获取和设置线程的优先级。
class MutiThread
{
public static void main(String[] args)
{
MyThread mt=new MyThread();
//mt.setDaemon(true); //将 mt 所在的线程设置为后台线程 .
mt.start();
mt.setPriority(Thread.MAX_PRIORITY);
int index=0;
while(true)
{
if(index++==1000)
剩余10页未读,继续阅读
资源评论
筱筱笎琞
- 粉丝: 8
- 资源: 15万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功