java学习笔记 线程的实现与同步
2019.4.2
线程实现的两种方式
- 继承线程,复写其中的run方法
- 实现runnable接口,复写run方法
使用:
MyThread target = new MyThread();
new Thread(taget).start();
//或者使用匿名 如下
new Thread(new Runnable() {
@Override
public void run() {
}
}).start();
synchronized 同步操作
1. 同步代码块
声明一个互斥锁
static Object lock = new Object();
在一个线程的run方法中
@Override
public void run() {
while (true) {
try {
sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock) {
System.out.println(num);
num++;
}
}
}
- synchronized同步方法以及使用
/**
* @author StarsOne
* @date Create in 2019/4/6 0006 17:49
* @description
* 1. 编写一个线程类,创建三个该线程的实例对同一个共享的int型变量作同步的递增操作。并在控制台输出:0,1,2,3,4,5….。要求分别使用以下两种同步方式实现:
* a) 使用synchronized同步块实现。对共享int型变量的同步访问。
* b) 使用synchronized方法实现。对共享int型变量的同步访问。
*/
class HomeWork1 extends Thread {
static int num = 0;//需要修改的共享变量
String currentThreadName;//线程名
static final Object object = new Object();//一个对象锁,必须要static和final关键字修饰
public HomeWork1(String currentThreadName) {
setDaemon(true);//设置为守护进程(子进程),主进程结束,子进程也结束
this.currentThreadName = currentThreadName;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(150);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.changeNum(currentThreadName);
//同步代码块
/* synchronized (object) {
System.out.println(currentThreadName+":"+num);
num++;
}*/
}
}
//synchronized同步方法
private static synchronized void changeNum(String name) {
System.out.println(name+":"+num);
num++;
}
public static void main(String[] args) {
HomeWork1 thread1 = new HomeWork1("thread1");
HomeWork1 thread2 = new HomeWork1("thread2");
HomeWork1 thread3 = new HomeWork1("thread3");
HomeWork1 thread4 = new HomeWork1("thread4");
thread1.start();
thread2.start();
thread3.start();
thread4.start();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//2s秒结束主线程,其相关的子线程一并结束
}
}
java学习笔记 线程的实现与同步的更多相关文章
- Java学习笔记 线程池使用及详解
有点笨,参考了好几篇大佬们写的文章才整理出来的笔记.... 字面意思上解释,线程池就是装有线程的池,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程 ...
- Java 学习笔记 线程控制
题目一 本质上来说,线程是不可控制的,线程的执行是由CPU资源分配决定的,我们无法干预系统CPU的资源分配,但我们可以增加条件来让线程按照我们的预想顺序来执行. 比如.如果当前的执行的线程不满足我们所 ...
- java学习笔记 - 线程池(一)
线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销 优点:(面试题)可重复使用已有线程,避免对象创建.消亡和过度切换的性能开 ...
- Java学习笔记--线程day01
线程的概念:一个线程是进程的顺序执行流: 同类的多个线程共享一块内存空间和一组系统资源,线程本身有一个供程序执行时的堆栈.线程在切换时负荷小,因此,线程也被称为轻负荷进程.一个进程中可以有多个线程. ...
- Java学习笔记——线程
线程: 定义:线程是程序内的一个单一的顺序控制流程,也被称为“轻型进程(lightweight process)” 或“执行上下文(execution context )” 线程用于分隔任务 线程类似 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
随机推荐
- Nginx负载均衡的5种策略(转载)
Nginx的upstream目前支持的5种方式的分配 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. upstream backserver { s ...
- Red and Black---POJ - 1979
There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A ...
- 实验五:任意输入10个int类型数据,排序输出,并找出素数
源代码: package 数组;import java.util.*;public class vvv { public static void main(String[] args) { Scann ...
- 神经网络_线性神经网络 2 (Nerual Network_Linear Nerual Network 2)
1 LMS 学习规则 1.1 LMS学习规则定义 MSE=(1/Q)*Σe2k=(1/Q)*Σ(tk-ak)2,k=1,2,...,Q 式中:Q是训练样本:t(k)是神经元的期望输出:a(k)是神经元 ...
- Vue 学习笔记 — filter
简书 对将要插入html的对象进行处理 一个简单的Vue示例 基本过滤器用法 带参数的过滤器 全局过滤器 (这张图片有点问题,最后显示的应该是 hello world不是null) 过滤器的简单应用 ...
- 【DFS】求水洼的数目
题目: 有一个大小为 N*M 的园子,雨后积起了水.八连通的积水被认为是连接在一起的.请求出园子里总共有多少水洼?(八连通指的是下图中相对 W 的*的部分) *** *W* *** 限制条件:N, M ...
- Android OpenGL ES 开发(六): OpenGL ES 添加运动效果
在屏幕上绘制图形只是OpenGL的相当基础的特点,你也可以用其他的Android图形框架类来实现这些,包括Canvas和Drawable对象.OpenGL ES为在三维空间中移动和变换提供了额外的功能 ...
- [Swift]LeetCode592. 分数加减运算 | Fraction Addition and Subtraction
Given a string representing an expression of fraction addition and subtraction, you need to return t ...
- [Swift]LeetCode802. 找到最终的安全状态 | Find Eventual Safe States
In a directed graph, we start at some node and every turn, walk along a directed edge of the graph. ...
- Truncated incorrect DOUBLE value: 'd'的解决方法(jdbc)
今天写jdbc中dao的增删改查时遇到了一个问题,花费了好长时间,不过还好,有我峰哥出头,问题解决了,在这做个分享,对峰哥表达一下感激之情 网上搜索到的对“Truncated incorrect DO ...