java多线程,何时使用notify(),何时使用wait(),怎么使用synchronized
答:
0.ThreadLocal是为了保证各个线程间数据安全的,我们不需要任何同步代码,却能够保证我们线程间数据的安全。
1.使用synchronized 则根据锁进行同步,或是同步方法同步
2.在本线程执行完成逻辑后,调用notify通知其他线程准备执行
3.调用wait方法,将自己释放锁
以下是简单代码:
public class ThreadTest implements Runnable {
public ThreadTest() {
TestThread testthread1 = new TestThread(this, "1");
TestThread testthread2 = new TestThread(this, "2");
testthread2.start();
testthread1.start();
}
public static void main(String[] args) {
ThreadTest demoThread1 = new ThreadTest();
}
public void run() {
TestThread t = (TestThread) Thread.currentThread();
try {
if (!t.getName().equalsIgnoreCase("1")) {
synchronized (this) {
System.out.println(t.getName()+".wait() 将自己进入等待,释放锁");
wait();//wait将自己进入等待,释放锁
}
}
while (true) {
System.out.println(t.getName()+" in thread" + t.getName() + "="
+ t.increaseTime());
if (t.getTime() % 10 == 0) {
synchronized (this) {
System.out
.println("****************************************");
System.out.println(t.getName()+".notify() 通知正在等待的线程工作");
notify();
if (t.getTime() == 40)//end
break;
System.out.println(t.getName()+".wait() 将自己进入等待,释放锁");
wait();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class TestThread extends Thread {
private int time = 0;
public TestThread(Runnable r, String name) {
super(r, name);
}
public int getTime() {
return time;
}
public int increaseTime() {
return ++time;
}
}
join方法:join则表示调用的线程执行完后,再执行其他操作。
分享到:
相关推荐
### Java线程入门知识点详解 #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...
以下是对Java线程入门的详细讲解: 1. **线程的基本概念**: - 线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。 - 在Java中,每个应用程序至少有一个主线程,它负责启动和控制其他线程。...
本文将基于提供的"Java线程入门"资料,深入探讨Java线程编程的基本概念、创建方法以及常见操作,帮助初学者建立起扎实的线程知识体系。 一、线程基础 1. 线程定义:线程是操作系统分配CPU时间的基本单元,一个进程...
### Java线程入门知识点详解 #### 一、Java线程概览 - **目标读者**:本教程面向那些已经熟练掌握Java语言基本应用但对多线程编程尚不熟悉的程序员。 - **主要内容**:本教程将从零开始介绍Java线程的基础知识,...
Java线程入门,学习Java线程的好帮手
本书《Java线程入门》显然为初学者提供了一个良好的起点,适合对编程有一定了解的人群。书中可能涵盖了以下几个核心知识点: 1. **线程的概念与分类**:介绍什么是线程,线程如何在操作系统中运行,以及Java中线程...
### Java线程入门大全知识点详解 #### 一、线程基础概述 - **定义与特点:** - **线程**是一种比进程更细粒度的执行单元,它允许在一个进程中并发执行多个任务。 - **多线程**能够提高程序的效率和响应速度,...
本教程旨在为初学者提供一个良好的Java线程入门指导,通过详细的开发环境讲解,帮助你快速上手。 首先,了解Java开发环境是学习任何编程语言的基础。Java的开发环境主要由Java Development Kit (JDK) 组成,它包含...
本教程中的"java线程入门教程,涉及线程基本知识,显浅易懂."文件将详细讲解这些概念,并通过示例代码帮助读者理解和实践。"1-2论坛"可能包含了一些讨论和问题解答,可以帮助你解决学习过程中遇到的困惑。通过学习这...
本教程将深入浅出地介绍Java线程的基础知识,帮助初学者快速入门。 一、线程的创建 1. 继承Thread类:创建一个新的类,该类继承自Thread类,然后重写其run()方法。实例化这个子类对象后,调用start()方法即可启动...
Java多线程是Java编程中的核心概念...通过阅读《Java线程入门.pdf》这样的学习资料,结合实际编程实践,可以逐步掌握这门技术。在学习过程中,参考《E书说明.txt》中的指导,可以更好地利用提供的资源,加速学习进程。
### Java多线程入门知识点详解 #### 一、引言 多线程是现代软件开发中的重要技术之一,尤其在Java编程语言中占有极其重要的地位。对于任何一位Java程序员而言,掌握多线程的基本概念和技术是非常必要的。本文将...
尤其适合于没有 Java 线程开发经验的朋友。自己动手敲出本资源解压缩后的 chapter02 到 chanpter18,并运行,用心体会一下。也许在运行完 chapter18 的源码之后,你已经是一个对线程有着深刻理解的线程编程高手了! ...