java多线程(java开发实战经典 知识点2)

3.java多线程:      卖票事例p275
实现多线程代码的两种手段, 一种是继承Thread类, 另一种是实现Runnable接口。
 为什么启动多线程时, 必须通过start()方法, 而不是run()方法?
回答: 线程的运行需要本机操作系统支持。
一般重复调用start()方法时会抛出IllegalThreadStateException异常, 而实际上调用的是
start0()方法, start0()方法的声明使用了native关键字, 此关键字表示调用的是本机的操作系统函数,
因为多线程的实现需要依靠底层操作系统的支持。

如果一个类继承了Thread类, 则不适合于多个线程共享资源, 而实现了Runable接口, 就可以方便的实现资源共享。

线程的状态: 创建 new、就绪 start、运行 run、堵塞 (wait、sleep、suspend)、死亡 (destory、stop)。

后台线程: 在java程序中, 只要前台有一个线程运行, 则整个Java进程都不会消失, 所以此时可以设置一个后台进程,
这样即使Java进程结束了, 此后台线程依然会继续执行。 要想实现这样的操作, 直接使用 Threat tt = new Thread(); tt.setDaemon(true);

如果通过实现Runnable接口, 多个线程进行资源共享时, 要使用synchronized关键字进行资源的同步处理,  就会面临 同步 和 死锁:
解决方法: 同步代码块、 同步方法、 等待 或 唤醒
案例(生产者和消费者) p296

强制运行某一线程:  使用join() 方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值