线程的一些笔记,入门。
【第九章 线程】 run一结束,线程就结束
【线程】:是一个程序里面不同的执行路径。 java.lang.Thread
可以通过创建Thread的实例来创建新的线程。
每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体
通过调用Thread类的【start()方法来启动一个线程】。[使用strat才启用线程,run是线程实现的一个方法]
-----------------实现Runnable接口,还可以继承其他类实现其他接口,方法优于第二种--------
public class TestThread1{
public static void main(String[] args){
Runner1 r = new Runner1();
Thread t = new Thread(r);
t.start();
for(int i=0; i<100; i++){
System.out.println("Main Thread:------" + i);
}
}
}
class Runner1 implements Runnable{
public void run(){
for(int i=0; i<100; i++){
System.out.println("Runner1:"+ i);
}
}
}
-----------------------继承Thread实现线程,方法较狭窄,不推荐使用-----------------------
public class TestThread2{
public static void main(String[] args){
Runner1 r = new Runner1();
r.start();
for(int i=0; i<100; i++){
System.out.println("Main Thread:------" + i);
}
}
}
class Runner1 extends Thread{
public void run(){
for(int i=0; i<100; i++){
System.out.println("Runner1:"+ i);
}
}
}
--------------------------------------------------------------------------------------
【线程状态】
线程控制基本方法:
==========================================================
【方法】 【功能】
-------------------------------------------------------------
isAlive() 判断线程是否还"活"着,即线程是否还未终止
-------------------------------------------------------------
getPriority() 获得线程的优先级数值
-------------------------------------------------------------
setPriority() 设置线程的优先级数值
-------------------------------------------------------------
Thread.sleep() 将当前线程睡眠指定毫秒数
-------------------------------------------------------------
join() 调用某线程的该方法,将当前线程与该线程"合并"
即等待该线程结束,再恢复当前线程的运行。
-------------------------------------------------------------
yield() 让出cpu,当前线程进入就需队列等待调度
-------------------------------------------------------------
wait() 当前线程进入对象的wait pool
-------------------------------------------------------------
notify() 唤醒对象的wait pool 中的一个
notifuAll() /所有等待线程。
-------------------------------------------------------------
【sleep方法】 =>>>在哪个线程调用sleep方法,就让哪个线程睡眠
可以调用Thread 的静态方法:
public static void sleep(long millis) throws InterruptedException
使得当前线程休眠(暂时停止执行millis毫秒)
优于是静态方法,sleep 可以由类名直接调用:
Thread.sleep();
----------------------------------------------------------------------
import java.util.*;
public class TestThread3{
public static void main(String[] args){
MyThread thread = new MyThread();
Thread t = new Thread(thread);
t.start();
try{
t.sleep(10000);
}catch(InterruptedException e){}
t.interrupt();
}
}
/*
class MyThread extends Thread{
public void run(){
while(true){
System.out.println("==="+ new Date()+"===");
try{
sleep(1000);
}catch(InterruptedException e){
return;
}
}
}
}
*/
class MyThread implements Runnable{
public void run(){
while(true){
System.out.println("==="+ new Date()+"===");
try{
Thread.sleep(1000);
}catch(InterruptedException e){
return;
}
}
}
}
------------------------------------------------------------------------
【join方法】
合并某个线程
public class TestJoin{
public static void main(String[] args){
MyThread2 t1 = new MyThread2("abcde");
t1.start();
try{
t1.join();
}catch(InterruptedException e){}
for(int i=1;i<=10; i++){
System.out.println("i am mian thread");
}
}
}
class MyThread2 extends Thread{
MyThread2(String s){
super(s);
}
public void run(){
for(int i=1;i<=10; i++){
System.out.println("i am "+getName());
try{
sleep(1000);
}catch(InterruptedException e){
return ;
}
}
}
}
----------------------------------------------------------------------
【yield方法】
让出CPU,给其他线程执行的机会
public class TestYield{
public static void main(String[] args){
MyThread3 t1 = new MyThread3("AAA--1-----");
MyThread3 t2 = new MyThread3("CCC--2-----");
t1.start(); t2.start();
}
}
class MyThread3 extends Thread{
MyThread3(String s){
super(s);
}
public void run(){
for(int i=1; i<=100; i++){
System.out.println(getName()+": "+i);
if(i%10==0){
yield();
}
}
}
}
----------------------------------------------------------------------
线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5.
Thread.MIN_PRIORITY = 1
Thread.MAN_PRIORITY = 10
Thread.NORM_PRIORITY = 5
使用下述线方法获得或设置线程对象的优先级。
int getPriority();
void setPriority(int newPriority);
----------------------------------------------------------------------
public class TestPriority{
public static void main(String[] args){
Thread t1 = new Thread(new T1());
Thread t2 = new Thread(new T2());
t1.setPriority(Thread.NORM_PRIORITY + 3);
t1.start();t2.start();
}
}
class T1 implements Runnable{
public void run(){
for(int i=0;i<1000; i++){
System.out.println("T1:" + i);
}
}
}
class T2 implements Runnable{
public void run(){
for(int i=0; i<1000; i++){
System.out.println("----------T2:" + i);
}
}
}
=======================================================================================
[线程同步]
在java 语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性。每个对象都对应于一个可称为
"互斥锁"的标记,这个标记保证在任一时刻,只能有一个线程访问该对象。
关键字synchronized 来与对象的互斥锁联系。当某个对象synchronized 修饰时,表明该对象在任一时刻只能由一个线程访问。
synchronized 的使用方法:
synchronized(this){
num ++;
try{Thread.sleep(1);}
catch(InterruptedException e){}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
}
也可以放在方法声明中,表示整个方法为同步方法,例如:
public synchronized void add(String name){...}
synchronized 执行方法的过程中,当前的对象被锁定,
里面的成员对象也锁定(num),一个线程执行过程中不会被另一个线程打断
public class TestSync implements Runnable{
Timer timer = new Timer();
public static void main(String[] args){
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();t2.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
}
class Timer{
private static int num = 0;
public synchronized void add(String name){
//synchronized(this){
num ++;
try{
Thread.sleep(1);
}catch(InterruptedException e){}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
// }
}
}
分享到:
相关推荐
Java基本语法大全
二、Java基本语法 1. **变量**:Java中的变量必须先声明后使用,有八种基本数据类型(byte, short, int, long, float, double, char, boolean)和引用数据类型(对象、数组、接口)。 2. **数据类型转换**:Java支持...
Java 基本语法编程练习 Java 是一种广泛使用的高级编程语言,具有平台独立性、对象oriented 和大规模的标准库等特点。Java 基本语法编程练习是学习 Java 语言的基础,以下是 Java 基本语法编程练习的知识点总结: ...
Java基本语法
JAVA的基本语法及48个关键字! chm文档! 找了好久都找不到,只好自己做一个了! 分享一下...
java基本语法大全 非常好用,详细地介绍了java语法特点,还有丰富的实例
Java基本语法.ppt 让读者对数据类型、表达式等Java基本语法内容有一个了解,这些内容是任何一门程序设计语言都必须包含的部分,可为程序设计打基础
根据给定文件的信息,我们可以深入探讨Java的基本语法和核心概念,包括程序结构、注释、...以上知识点覆盖了Java基本语法的核心要素,包括程序结构、注释、数据类型以及变量和常量的使用,为初学者提供了坚实的基础。
JAVA语法大全(基本语法) JAVA语法大全是指JAVA的基本语法,包括关键字、词法规则、数据类型、常量与变量、运算符和表达式、语句、数组和字符串等方面的知识点。 一、词法规则 词法规则是JAVA程序的基本组成部分...
JavaSE阶段,基本语法部分的思维导图,学习Java对于新人来说本来就比较难,我在这里自己把基本语法部分的知识点都进行了一个串联,做成了一个思维导图,可供初学者以及备考学生进行参考
这篇总结将深入探讨Java的基础语法,帮助初学者理解并掌握Java编程的核心概念。 **1. Java程序结构** Java程序由类(Class)组成,每个类都包含方法(Method)。程序执行始于main方法。例如: ```java public class...
Java的基本语法的笔记
本_experiment_总结了 Java 的一些基本的语法知识,包括变量和常量的使用、运算符与表达式的使用、选择、循环、分支语句的使用等。实验内容包括输入一个学生的成绩,给出相应的等级、编写一个程序从键盘输入 5 个...
### Java基础语法汇总 本文将基于给定的文件信息,对Java的基础语法进行一次全面而深入的解析。Java作为一种广泛使用的编程语言,在软件开发、Web应用、移动应用等多个领域都有着重要的地位。对于初学者而言,掌握...
01.Java基本语法
总的来说,Java基本语法的学习对于初学者来说至关重要,因为它提供了编写Java程序的基础。理解这些概念后,开发者能够创建简单的程序,并逐渐进阶到更复杂的面向对象编程。通过不断的实践和学习,可以掌握Java编程的...
以下是Java基本语法的一些核心知识点: 1. **数据类型**:Java有两大类数据类型,即基本数据类型和引用数据类型。基本数据类型包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔...
Java 基本语法 Java 程序设计的基本语法是学习 Java 的基础,这部分内容涵盖了 Java 的变量、常量、运算符、控制语句等基础知识。 一、变量 在 Java 中,变量是存储数据的一个基本单元房间,变量名是房间的名字,...
第2章_Java基本语法