java线程学习1——线程基本概念和操作

简介:

 

一、创建线程的两种方式

 

1 继承Runnable接口

public class ThreadImpRunnable implements Runnable
{
 /**
  * 线程运行时执行的方法
  */
 public void run()
 {
  for (int i = 0; i < 500; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }

}

 

public class Test
{
 /**
  * 主线程,启动线程必须是start方法
  */
 public static void main(String[] args)
 {
  ThreadImpRunnable tr = new ThreadImpRunnable();
  Thread t = new Thread(tr);
   t.start();

  for (int i = 0; i < 500; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }
}

 

 

2 继承Thread类

public class ThreadExtends extends Thread
{
 /**
  * 线程运行时执行的方法
  */
 public void run()
 {
  for (int i = 0; i < 500; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }

}

 

public class Test
{
 /**
  * 主线程,启动线程必须是start方法
  */
 public static void main(String[] args)
 {
  
ThreadExtends tr = new ThreadExtends();
  tr.start();

  for (int i = 0; i < 500; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }
}

 

 

 

二、线程的一些方法

1 sleep

public class SleepThread implements Runnable
{
 /**
  * 线程运行时执行的方法
  */
 public void run()
 {
  try
  {
   // 该线程进入阻塞状态5秒
   
Thread.sleep(5000);
   for (int i = 0; i < 500; i++)
   {
    System.out.println(Thread.currentThread().getName() + i);
   }
  }
  catch (InterruptedException e)
  {
   // 若调用该线程的interrupt方法,会报该异常,真实程序中可以关闭一些资源
   e.printStackTrace();
  }
 }
}

 

public class SleepTest
{
 /**
  * 主线程
  */
 public static void main(String[] args)
 {
  SleepThread tr = new SleepThread();
  Thread t = new Thread(tr);
  t.start();
  for (int i = 0; i < 500; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }
}

 

2 Join

public class JoinThread implements Runnable
{
 public void run()
 {
  for (int i = 0; i < 100; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }
}

 

public class JoinTest
{
 public static void main(String[] args)
 {
  JoinThread jt = new JoinThread();
  Thread t = new Thread(jt);
  t.start();
  try
  {
   // 调用该方法将当前线程(此处是主线程)合并到本线程中,
执行完本线程,再执行当前线程
   
t.join();
  }
  catch (InterruptedException e)
  {
   e.printStackTrace();
  }
  for (int i = 0; i < 100; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }

}

 

 

3 yield

public class YieldThread extends Thread
{
 public void run()
 {
  for (int i = 0; i < 100; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
   if (i % 10 == 0)
   {
    // 当能被10整除时本线程让出优先级,让其他线程先执行一会,可看到t1_10下面紧接着t2的结果,同样t2_20下面紧接着t1的结果
   
 yield();
   }
  }
 }
}

 

public class YieldTest
{
 public static void main(String[] args)
 {
  YieldThread yt = new YieldThread();
  Thread t1 = new Thread(yt, "t1_");
  t1.start();

  Thread t2 = new Thread(yt, "t2_");
  t2.start();
 }
}

 

4 setPriority

public class PriorityThread extends Thread
{
 public void run()
 {
  for (int i = 0; i < 100; i++)
  {
   System.out.println(Thread.currentThread().getName() + i);
  }
 }
}

 

public class PriorityTest
{
 /**
  * 线程优先级默认是5
  */
 public static void main(String[] args)
 {
  int norm = Thread.NORM_PRIORITY; // 5
  int max = Thread.MAX_PRIORITY;   // 10
  int min  = Thread.MIN_PRIORITY;  // 1

  PriorityThread yt = new PriorityThread();
  Thread t1 = new Thread(yt, "t1_");
  t1.setPriority(norm + 3);
  t1.start();

  Thread t2 = new Thread(yt, "t2_");
  t2.start();
 }
}

 

 

目录
相关文章
|
6月前
|
Java
Java中多线程的基本概念、实现方式及其应用
Java中多线程的基本概念、实现方式及其应用
44 1
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
34 2
|
3月前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
185 6
【Java学习】多线程&JUC万字超详解
|
7月前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
调度
线程操作:锁、条件变量的使用
线程操作:锁、条件变量的使用
36 1
|
6月前
|
NoSQL Redis
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
Redis系列学习文章分享---第五篇(Redis实战篇--优惠券秒杀,全局唯一id 添加优惠券 实现秒杀下单 库存超卖问题分析 乐观锁解决超卖 实现一人一单功能 集群下的线程并发安全问题)
135 0
|
6月前
|
调度 Python
Python多线程学习优质方法分享
Python多线程学习优质方法分享
27 0
|
7月前
|
算法 调度
【操作系统】处理机调度的基本概念和三个层次、进程调度的时机和方式、调度器、闲逛线程
【操作系统】处理机调度的基本概念和三个层次、进程调度的时机和方式、调度器、闲逛线程
589 3
|
6月前
|
安全 API C++
逆向学习Windows篇:C++中多线程的使用和回调函数的实现
逆向学习Windows篇:C++中多线程的使用和回调函数的实现
208 0
|
7月前
|
Java 调度
【JAVA学习之路 | 提高篇】进程与线程(Thread)
【JAVA学习之路 | 提高篇】进程与线程(Thread)