Java基础学习 —— 线程
线程:
多线程的好处:解决了在一个进程中同时执行多个任务代码的问题。
自定义线程的创建方式:
1.自定一个类继承thread类,重写thread的run方法 吧自定义线程的任务代码写在run方法内,创建thread子类的对象并且调用start()方法启动线程。
2.自定义一个类实现runnable接口,实现runnable接口中run方法,吧自定义线程的任务代码写在run方法内部,创建runnable实现类的对象 ,创建thread对象并且把runnable实现类的对象作为参数传递,调用thread对象的start方法开启线程。
线程安全问题出现的根本原因:
必须存在着两个或者两个以上的线程共享一个资源。
操作共享资源的代码必须有两句或者有两句以上
线程安全问题的解决方案:
同步代码块解决
synchronized(锁){
需要被同步的代码
}
同步行数解决:
修饰符 synchronized 函数名(形参列表。。。){
}
public class demo1 extends Thread{
public demo1(String name) {
super(name);
}
public void run() {
for (int i = 0; i < 50; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args) {
demo1 demo1 = new demo1("sony");
demo1.start();
for (int i = 0; i < 50; i++) {
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
}
sony:0
main:0
sony:1
main:1
sony:2
main:2
sony:3
sony:4
main:3
sony:5
main:4
sony:6
main:5
sony:7
main:6
sony:8
sony:9
sony:10
sony:11
sony:12
sony:13
sony:14
sony:15
sony:16
sony:17
sony:18
sony:19
sony:20
sony:21
sony:22
sony:23
sony:24
main:7
sony:25
main:8
sony:26
main:9
sony:27
main:10
sony:28
main:11
sony:29
main:12
sony:30
main:13
main:14
sony:31
main:15
sony:32
main:16
sony:33
main:17
main:18
sony:34
main:19
main:20
sony:35
main:21
sony:36
sony:37
sony:38
main:22
sony:39
main:23
sony:40
main:24
main:25
main:26
sony:41
main:27
sony:42
main:28
sony:43
main:29
sony:44
main:30
sony:45
main:31
sony:46
main:32
sony:47
main:33
sony:48
main:34
sony:49
main:35
main:36
main:37
main:38
main:39
main:40
main:41
main:42
main:43
main:44
main:45
main:46
main:47
main:48
main:49
注意事项:
同步代码块的锁 可以是任意的对象。但是同步锁对象必须是多线程共享的对象,否则锁不住。
同步函数的锁 是固定的 非静态函数的锁对象是 this对象,静态函数的锁对象时 class对象。
在同步代码块或同步函数中调用sleep方法是不会释放锁对象的。如果调用的wait方法是会释放锁对象的。
Java基础学习 —— 线程的更多相关文章
- 转载-java基础学习汇总
共2页: 1 2 下一页 Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3 Java基础学习总结——Java对象的序列化和 ...
- JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API
森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397 文章- 0 评论- 78 JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Java基础学习(4)
Java基础学习(四) String类 特点:创建后不可再修改,看起来的修改只是创建了新的对象 常用方法 StringBuilder类 目的:解决String类频繁创建对象的问题 常用方法 特点:非线 ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- Java基础学习中一些词语和语句的使用
在Java基础学习中,我们刚接触Java会遇到一些词和语句的使用不清的情况,不能很清楚的理解它的运行效果会是怎么样的,如:break,continue在程序中运行效果及跳转位置, 1.先来看看brea ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- java基础学习总结——开篇
java是我学习的第一门编程语言,当初学习java基础的时候下了不少功夫,趁着这段时间找工作之际,好好整理一下以前学习java基础时记录的笔记,当作是对java基础学习的一个总结吧,将每一个java的 ...
- Java基础学习笔记(一)
Java基础学习笔记(一) Hello World 基础代码学习 代码编写基础结构 class :类,一个类即一个java代码,形成一个class文件,写于每个代码的前端(注意无大写字母) XxxYy ...
随机推荐
- ajax-jquery方法-初步入门01(整理)
-----------------------------------2017.07.21写----------------------------------------- 相比较原生javascr ...
- log4go的日志滚动处理——适应生产环境的需要
日志处理有三类使用环境,开发环境DE,测试环境TE,生产环境PE. 前两类可以看成是一类,重要的是屏幕显示--termlog.生产环境中主要用的是socklog 和 filelog,即网络传输日志和文 ...
- apt-get命令失效
1.linux体系区分 a.ded体系,例如debian系统.ubuntu系统.使用apt-get命令: 例如:sudo apt-get install apache2 b.rpm体系,例如redha ...
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- .NET访问数据库的两种方式(C#语言)
一.直接使用C#操作数据库的类库ADO.NETADO.NET使用Connection对象来连接数据库,使用Command或DataAdapter 对象来执行SQL语句,并将执行的结果返回给DataRe ...
- 605. Can Place Flowers种花问题【leetcode】
Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, ...
- k近邻法(KNN)知识点概括
分类一般分为两种: 积极学习法:先根据训练集构造模型,然后根据模型对测试集分类 消极学习法:推迟建模,先简单存储训练集,等到给定测试集时再进行建模,如KNN算法. 1. 简述 KNN的核心思想就是:物 ...
- HTML5的三种存储方式以及区别
首先将存储方式前要先知道为什么要使用他:一是利用本地数据,介绍网络请求:二是弱网环境下,高延迟,低带宽,要把数据本地化: 1.本地存储localStorage和sessionStorage 介绍: 存 ...
- HDU 3625 Examining the Rooms:第一类stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3625 题意: 有n个房间,每个房间里放着一把钥匙,对应能开1到n号房间的门. 除了1号门,你可以踹开任 ...
- PyV8
待完善 pyv8是个js解析引擎, PyV8 是 V8 引擎的 Python 语言封装,这是 Python 和 JavaScript 对象之间的桥,支持在 Python 脚本中调用 V8 引擎. # ...