java多线程学习(一)
来源:互联网 发布:windows哪个系统好用 编辑:程序博客网 时间:2024/06/11 21:18
进程与线程
进程:就是应用程序在内存中的分配的空间(正在运行中的程序)
线程:是进程中负责程序执行的执行单元。也称为执行路径。
多线程技术:解决多部分代码同时执行的需求,合理的使用CPU资源。
线程的任务都封装在特定的区域中:
:比如:主线程运行的任务都在定义在main方法中
垃圾回收线程在收垃圾都会运行finalize方法
如何建立一个执行路径?
创建线程的两种方法:
1.继承Thread类
(1.继承thread类
2.覆盖run方法
3.创建子类对象就是创建线程对象
)
2.实现Runnable接口
(1.定义一个类实现Runnnable
2.覆盖Runnable接口中的run方法,将线程要运行的任务代码存储到方法中
3.通过Thread类创建线程对象,并将实现Runnable接口的对象作为Thread类的构造函数的参数进行传递
4.调用Thread类的start方法,开启线程
)
例子:
class SaleTicket implements Runnable{ private int tickets=100; public void run() { whlie(true) { if(tickets>0) { Sysytem.out.println(Thread.currentThread.getName()+"..."+tickets--); } } }}class TicketDemo{ public static void main(String[] args) { SaleTicket t=new SaleTicket(); //创建4个线程 Thread t1=new Thread(t); Thread t2=new Thread(t); Thread t3=new Thread(t); Thread t4=new Thread(t); t1.start(); t2.start(); t3.start(); t4.start(); }}
创建线程使用第二种比较好
实现Runnable接口的好处:
1.避免了继承Thread类的单继承的局限性
2.Runnable接口出现更符合面向对象,将线程单独进行了封装
3.Runnable接口出现降低了线程对象和线程任务的耦合性
开启线程要用start方法,没有用start方法,执行任务的只有主线程。
多线程的安全问题
产生原因:
1.线程任务中有处理到共享的数据
2.线程任务中有多条对共享数据的操作(一个线程在操作共享数据的过程中,其他线程参与了运算,造成了数据的错误)
解决的思想:
只要保证多条操作共享数据的代码在某一段时间段,被一条线程所执行,在执行期间不允许其他线程参与运算
1.用到同步代码块
synchronize(对象)
{
需要同步的代码
}
class SaleTicket implements Runnable{ private int tickets=100; Object obj=new Object(); public void run() { whlie(true) { synchronized(obj) { if(tickets>0) { Sysytem.out.println(Thread.currentThread.getName()+"..."+tickets--); } } } }}class TicketDemo{ public static void main(String[] args) { SaleTicket t=new SaleTicket(); //创建4个线程 Thread t1=new Thread(t); Thread t2=new Thread(t); Thread t3=new Thread(t); Thread t4=new Thread(t); t1.start(); t2.start(); t3.start(); t4.start(); }}
同步问题
同步的好处和弊端
好处:解决了多线程的安全问题
弊端:降低效率
同步的前提:多个线程在同步中必须使用同一个锁,这才是对多个线程同步
- java多线程学习(一)
- JAVA多线程学习(一)
- java多线程学习(一)
- JAVA多线程学习(一)
- JAVA多线程学习---(一)
- JAVA多线程学习(一)
- Java多线程学习(一)
- java多线程学习(一)
- java多线程学习(一)
- java多线程学习(一)
- Java学习-多线程(一)
- java多线程学习一
- 学习JAVA多线程程序设计(一)
- Java多线程学习总结(一)
- java多线程学习总结(一)
- Java学习经验(一)多线程初识
- Java多线程学习总结(一)
- Java中多线程学习总结(一)
- Apache Kafka源码分析-客户端请求响应模型
- C++ Primer Plus(第六版) 第八章 第一题
- 一张图解析2017上海“互联网+生活”报告,移动开发者需要了解
- 已安装的Chrome浏览器插件记录(未完待续)
- LeetCode 377 Combination Sum IV
- java多线程学习(一)
- Android插件化入门指南
- 时间复杂度O(f(n))
- java项目——淘宝商城
- LeetCode@Dynamic_70_Climbing_Stairs
- 八大排序算法(5) 冒泡排序
- 安卓智能地图开发与实施十六:三维地图
- JS写一个方法求数组奇数和偶数的和
- Java开发环境