`

java线程基本用法(一)

 
阅读更多
一、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线程使用教程

    本教程将深入探讨Java线程的使用,帮助开发者掌握这一关键技术。 一、线程基础 1. **线程的概念**:线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。在Java中,每个线程都有自己的程序...

    java线程使用教程

    ### Java线程使用教程知识点详解 #### 一、线程基础概述 - **定义与特点**:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中...希望本教程能帮助读者更好地理解和掌握Java线程的使用方法。

    Java线程详解大全

    Java线程是并发编程的核心部分,它允许程序在同一时间执行多个独立的任务,从而提高系统效率和响应速度。本文将深入探讨Java线程的概念、生命周期、实现方式以及相关的同步机制。 首先,理解线程的基本概念至关重要...

    java的多线程使用方法

    java多线程的使用方法如何使用,怎么使用,使用过程中有什么要注意的

    Java线程.ppt

    Java线程是Java编程中的重要概念,特别是在多核处理器和并发处理中不可或缺。Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了...

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    java线程分析工具TDA

    下面将详细介绍TDA的使用方法、功能以及它如何帮助我们解决Java多线程问题。 首先,我们需要了解什么是线程堆栈(Thread Dump)。线程堆栈是Java虚拟机在某一时刻对所有活动线程的状态快照,包括线程ID、线程状态、...

    JAVA单线程多线程

    这是Java实现线程安全的一种基本手段。 ##### 使用synchronized修饰方法 当`synchronized`用来修饰实例方法时,该方法称为同步方法。同一对象上的所有同步方法在同一时刻只能被一个线程访问。例如: ```java ...

    java线程深入解析

    创建Java线程有两种方式:继承`Thread`类并重写`run()`方法,或者实现`Runnable`接口并提供`run()`方法。当线程对象被创建并调用`start()`方法后,线程进入可运行态,由Java的线程调度器决定何时执行`run()`方法。 ...

    JAVA线程dump的分析

    生成JAVA线程dump的方法在不同的操作系统下是不同的,在Windows环境中,可以敲击Ctrl-Break键,在Unix、Linux和MacOS环境中,可以敲击Ctrl-\键或使用“kill -3 ”命令,Pid是关注的JAVA进程号。 在分析JAVA线程dump...

    java线程实例 各种小Demo

    Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而提高系统效率和响应速度。在Java中,线程可以分为用户线程和守护线程,前者是程序运行的基础,而后者是在所有用户线程结束时才终止的后台...

    JAVA线程停止的方法

    本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...

    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线程由`java.lang.Thread`类或`java.util.concurrent.Executor`框架来...

    Java多线程知识点总结

    Java提供了多种机制来保证线程安全,比如使用synchronized关键字来同步方法或代码块,实现线程之间的同步。当一个线程试图进入一个已经被另一个线程持有的同步代码块时,它将进入阻塞状态,直到同步代码块的执行线程...

    java线程入门级书籍

    #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中,线程是一种轻量级的进程,...

    java多线程经典案例

    此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...

    java多线程进度条

    为了在多线程中同步进度更新,我们可以利用synchronized关键字、wait()、notify()方法,或者使用Java并发库中的高级工具,如Semaphore、CyclicBarrier或CountDownLatch等。 一个简单的进度条实现可以采用共享变量...

    java线程文档大全

    Java线程是多任务编程中的核心概念,它允许程序同时执行多个不同的任务,极大地提高了程序的效率和响应性。在Java中,线程是通过Java.lang.Thread类或实现Runnable接口来创建和管理的。这份“java线程文档大全”包含...

Global site tag (gtag.js) - Google Analytics