一、java中实现一个线程
1.继承Thread类(这样其他类继承不了了,只能实现接口)
2.实现Runnable接口
二、实现线程了要共享一些数据
问题一:先实例化这个类,然后用这个类实现多个线程,达到数据的共享。
锁机制:问题是有时候一个线程执行一般的时候,另一个线程也去执行导致数据不一致。
package com.stx.thread;
public class Thread_1 implements Runnable {
private int t=20;
@Override
public void run() {
for(int i=0;i<5;i++){
//t--;
System.out.println(Thread.currentThread().getName()+"---"+t--);
}
}
public static void main(String[] args) {
Thread_1 t=new Thread_1();
Thread th=new Thread(t,"001");
Thread th1=new Thread(t,"002");
Thread th2=new Thread(t,"003");
th.start();
th1.start();
th2.start();
}
}
结果
001---20
001---17
001---16
001---15
001---14
003---18
003---13
003---12
003---11
003---10
002---19
002---9
002---8
002---7
002---6
问题二:基本的死锁 两个大房间每个房间还有个小房间 大(小)房间钥匙一样总只有两 把 刚好每人一把结果都卡那了,去得早的有可能那两把
public class TestDeadLock implements Runnable {
public int flag=1;
static Object o1=new Object(),o2=new Object();
public void run(){
System.out.println(Thread.currentThread().getName());
if(flag==1){
synchronized(o1){
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized(o2){
System.out.println(1);
}
}
}
if(flag==0){
synchronized(o2){
try{
Thread.sleep(500);
}catch(InterruptedException e){
e.printStackTrace();
}
synchronized(o1){
System.out.println(0);
}
}
}
}
public static void main(String[] args){
TestDeadLock t1=new TestDeadLock();
TestDeadLock t2=new TestDeadLock();
t1.flag=1;
t2.flag=0;
new Thread(t1).start();
new Thread(t2).start();
}
}
结果 电脑傻傻的等着啥也不干了
Thread-0
Thread-1
问题三:就是想写个统计运行时间的程序可是每次主线程先执行完,什么也搞不了,怎样让主程序执行一般等待其他线程结束了他在运行下面的内容那?
//找了个方法线程的join方法
//因为是在主线程内运行的新增线程的join方法 那就会在这个线程结束的时候才去执行主线程
//但是另一问题是肯定是 主线程里面运行了 多个线程都设置join吗?
//这个是在第一个线程启动后然后join的运行结果也确实如此
001---20
001---19
001---18
001---17
001---16
---ok---
003---15
003---14
003---13
ThreadLocal的详解http://lavasoft.blog.51cto.com/62575/51926/
分享到:
相关推荐
本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。在Java中,每个线程都有自己的程序...
### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中...希望本教程能帮助读者更好地理解和掌握Java线程的使用方法。
Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...
java多线程的使用方法如何使用,怎么使用,使用过程中有什么要注意的
Java线程是Java编程中的重要概念,特别是在多核处理器和并发处理中不可或缺。Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了...
Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...
下面将详细介绍TDA的使用方法、功能以及它如何帮助我们解决Java多线程问题。 首先,我们需要了解什么是线程堆栈(Thread Dump)。线程堆栈是Java虚拟机在某一时刻对所有活动线程的状态快照,包括线程ID、线程状态、...
这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...
创建Java线程有两种方式:继承`Thread`类并重写`run()`方法,或者实现`Runnable`接口并提供`run()`方法。当线程对象被创建并调用`start()`方法后,线程进入可运行态,由Java的线程调度器决定何时执行`run()`方法。 ...
生成JAVA线程dump的方法在不同的操作系统下是不同的,在Windows环境中,可以敲击Ctrl-Break键,在Unix、Linux和MacOS环境中,可以敲击Ctrl-\键或使用“kill -3 ”命令,Pid是关注的JAVA进程号。 在分析JAVA线程dump...
Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...
本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...
通过以上内容的学习,读者可以深入了解Java线程的高级使用方法,掌握如何在Java程序中高效地管理和控制线程,以及如何解决多线程环境下常见的问题。这对于开发高性能、高可用性的Java应用至关重要。
#### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 } } new MyThread().start(); ...
本资源"JAVA线程学习(源代码)"提供了关于Java线程的源代码示例,帮助我们深入理解和实践线程的使用。 首先,我们要理解Java中的线程模型。Java线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...
Java提供了多种机制来保证线程安全,比如使用synchronized关键字来同步方法或代码块,实现线程之间的同步。当一个线程试图进入一个已经被另一个线程持有的同步代码块时,它将进入阻塞状态,直到同步代码块的执行线程...
#### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中,线程是一种轻量级的进程,...
此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...
为了在多线程中同步进度更新,我们可以利用synchronized关键字、wait()、notify()方法,或者使用Java并发库中的高级工具,如Semaphore、CyclicBarrier或CountDownLatch等。 一个简单的进度条实现可以采用共享变量...
Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...