`
cfeers
  • 浏览: 140616 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java的基本语法(六)

    博客分类:
  • java
阅读更多

线程的一些笔记,入门。                

            【第九章  线程】  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基本语法大全(全).ppt

    Java基本语法大全

    Java的概述与基本语法规则

    二、Java基本语法 1. **变量**:Java中的变量必须先声明后使用,有八种基本数据类型(byte, short, int, long, float, double, char, boolean)和引用数据类型(对象、数组、接口)。 2. **数据类型转换**:Java支持...

    Java基本语法编程练习.doc

    Java 基本语法编程练习 Java 是一种广泛使用的高级编程语言,具有平台独立性、对象oriented 和大规模的标准库等特点。Java 基本语法编程练习是学习 Java 语言的基础,以下是 Java 基本语法编程练习的知识点总结: ...

    Java基本语法.doc

    Java基本语法

    JAVA基本语法及关键字.chm

    JAVA的基本语法及48个关键字! chm文档! 找了好久都找不到,只好自己做一个了! 分享一下...

    java基本语法大全

    java基本语法大全 非常好用,详细地介绍了java语法特点,还有丰富的实例

    Java基本语法.ppt

    Java基本语法.ppt 让读者对数据类型、表达式等Java基本语法内容有一个了解,这些内容是任何一门程序设计语言都必须包含的部分,可为程序设计打基础

    Java基本语法.pdf

    根据给定文件的信息,我们可以深入探讨Java的基本语法和核心概念,包括程序结构、注释、...以上知识点覆盖了Java基本语法的核心要素,包括程序结构、注释、数据类型以及变量和常量的使用,为初学者提供了坚实的基础。

    JAVA语法大全(基本语法)

    JAVA语法大全(基本语法) JAVA语法大全是指JAVA的基本语法,包括关键字、词法规则、数据类型、常量与变量、运算符和表达式、语句、数组和字符串等方面的知识点。 一、词法规则 词法规则是JAVA程序的基本组成部分...

    Java中的基本语法部分思维导图

    JavaSE阶段,基本语法部分的思维导图,学习Java对于新人来说本来就比较难,我在这里自己把基本语法部分的知识点都进行了一个串联,做成了一个思维导图,可供初学者以及备考学生进行参考

    JAVA基础语法总结

    这篇总结将深入探讨Java的基础语法,帮助初学者理解并掌握Java编程的核心概念。 **1. Java程序结构** Java程序由类(Class)组成,每个类都包含方法(Method)。程序执行始于main方法。例如: ```java public class...

    Java的基本语法的笔记

    Java的基本语法的笔记

    实验二:Java语法基础

    本_experiment_总结了 Java 的一些基本的语法知识,包括变量和常量的使用、运算符与表达式的使用、选择、循环、分支语句的使用等。实验内容包括输入一个学生的成绩,给出相应的等级、编写一个程序从键盘输入 5 个...

    java基础语法 汇总

    ### Java基础语法汇总 本文将基于给定的文件信息,对Java的基础语法进行一次全面而深入的解析。Java作为一种广泛使用的编程语言,在软件开发、Web应用、移动应用等多个领域都有着重要的地位。对于初学者而言,掌握...

    01.Java基本语法

    01.Java基本语法

    java基本语法ppt 下载

    总的来说,Java基本语法的学习对于初学者来说至关重要,因为它提供了编写Java程序的基础。理解这些概念后,开发者能够创建简单的程序,并逐渐进阶到更复杂的面向对象编程。通过不断的实践和学习,可以掌握Java编程的...

    Java 基本语法

    以下是Java基本语法的一些核心知识点: 1. **数据类型**:Java有两大类数据类型,即基本数据类型和引用数据类型。基本数据类型包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔...

    java基本语法.ppt

    Java 基本语法 Java 程序设计的基本语法是学习 Java 的基础,这部分内容涵盖了 Java 的变量、常量、运算符、控制语句等基础知识。 一、变量 在 Java 中,变量是存储数据的一个基本单元房间,变量名是房间的名字,...

    JAVA基础语法,最基本的语法

    本人属于初学者,通过老师的讲解,做出来的自身对JAVA基本语法的理解

Global site tag (gtag.js) - Google Analytics