`
还可以
  • 浏览: 80973 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

java中多线程的一些总结以及demo

阅读更多

  1、线程可以驱动任务。任务由实现Runnable接口的类定义。New ThreadRunnable)这段代码就是前面一句话最好的诠释。任何线程都可以启动另外一个线程。

由于所有其他线程都是由Main线程所产生的,所以main线程的优先级相对较高。要区分出任务和线程是不同的概念,是以线程去驱动任务的。

 

package com.thread.demo;

 

public class Threademo {

 

    /**

    * @param args

    */

    public static void main(String[] args) {

       Thread thread=new Thread(new Thread1());

       thread.start();

       System.out.println("sdfsdfsdf");

    }

}

class Thread1 implements Runnable{

    private final int i=0;

    private static int count=10;

    public void status(){

       System.out.println("the id is: "+count);

    }

    @Override

    public void run() {

       while(count--!=0){

           status();

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

       }

      

    }

   

}

 

 

 

 

 

2、关于ExecutorService线程管理器的使用:

package com.thread.demo;

 

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

 

public class Executordemo {

 

   

    public static void main(String[] a) throws InterruptedException{

       //ExecutorService为每个任务创建合适的上下文,也就是驱动任务的线程。

        ExecutorService service=Executors.newCachedThreadPool();

       for(int i=0;i<6;i++){

           service.execute(new Thread2());

           Thread.sleep(1000);

       }

        service.shutdown();

    }

}

class Thread2 implements Runnable{

     

    private final int i=0;

    //共同对同一个资源进行竞争

    private static int count=10;

    public void status(){

       System.out.println("the id is: "+count);

    }

    @Override

    public void run() {

       while(count-->0){

           status();

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

       }

      

    }

   

}

 

理解存在于代码的注释当中。

 

3、这段代码与前面一段代码的区别是:这段代码预先为即将执行的任务分配了5个线程,当任务提交到线程中时就不用再去重新分配线程了。减少了分配线程时的开销。

 

public class Executordemo2 {

 

    /**

    * @param args

    */

    public static void main(String[] args) {

       ExecutorService executor=Executors.newFixedThreadPool(5);

       for(int i=0;i<5;i++){

           executor.execute(new Thread3());

       }

       executor.shutdown();

 

    }

 

}

 

 

4、线程管理器只分配了1个线程的情况,导致所有的任务只有根据自己提交的顺序进行执行,代码如下:

package com.thread.demo;

 

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

 

public class SingleThreadDemo {

 

    /**

    * @param args

    */

    public static void main(String[] args) {

       ExecutorService excutor=Executors.newFixedThreadPool(1);

       for(int i=0;i<5;i++){

           excutor.execute(new Single());

           try {

              Thread.sleep(1000);

           } catch (InterruptedException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

           }

        }

          

       excutor.shutdown();

    }

}

class Single implements Runnable{

   private static int i=0;

    @Override

    public void run() {

       i++;

       System.out.println("sdfsdf"+i);

    }

   

}

 

5Java中的futrue设计模式:

java中,如果需要设定代码执行的最长时间,即超时,可以用java线程池ExecutorService类配合Future接口来实现。Future接口是JAVA标准API的一部分,在javaUtilconcurrent包中。Future接口是java线程Future模式的实现,可以来进行异步计算。

 

Futrue模式可以这样描述:我有一个任务,提交了Futurefuture替我完成这个任务,期间我可以干别的任何事。

 

 

6、关于futrue以及java中的Callable接口的使用,代码如下:

package com.thread.demo;

 

import java.util.ArrayList;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

 

public class FutrueCllasbledemo {

 

    /**

    * @param args

    * @throws ExecutionException

     * @throws InterruptedException

     */

    public static void main(String[] args) throws InterruptedException, ExecutionException {

       ExecutorService service=Executors.newCachedThreadPool();

       ArrayList<Future<String>> arraylist=new ArrayList<Future<String>>();

       for(int i=0;i<5;i++){

            arraylist.add(service.submit(new Callback()));

        }

        for(Future<String> future:arraylist){

        System.out.println(future.get());

        }

       

        service.shutdown();

    }

 

}

 

 

class Callback implements Callable<String>{

 

    @Override

    public String call() throws Exception {

       // TODO Auto-generated method stub

       return "hello";

    }

 

}

 

 

 

7、关于对线程使用sleep演示,由于当前线程挂起,自然导致线程驱动的任务挂起。以下为演示例子:

 

package com.thread.demo;

 

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

 

public class ThreadCompeteDemo {

   public static void main(String[] a){

       ExecutorService service=Executors.newCachedThreadPool();

       service.execute(new Threademo4());

       service.execute(new Threademo5());

      

       service.shutdown();

   }

}

 

class Threademo4 implements Runnable{

 

    @Override

    public void run() {

       try {

           Thread.sleep(1000);

       } catch (InterruptedException e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

       System.out.println("liu");

      

    }

   

}

class Threademo5 implements Runnable{

 

    @Override

    public void run() {

       System.out.println("yangyang");

    }

   

}

 

 

 

 

 

 

 

关于一些重要特性的总结:

线程的优先级将该线程的重要性传递给了调度器。

Excutor线程管理器可以对管理器的线程实行一次性的全部关闭。

创建任务,将线程附着到任务上,以使线程可以驱动任务。

java中,Thread类并不执行任何操作,它只是驱动他的任务。

Java的线程机制基于来自c的低级的p线程方式。

ThreadFactory工厂通常和ExecutorService 联合使用,通常前者位于后者的构造函数中,ThreadFactory主要为ExecutorService线程管理器产生的线程定制某些行为和属性。

分享到:
评论

相关推荐

    java多线程Demo

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新...

    JAVA多线程模式高清版+DEMO

    这个压缩包文件"JAVA多线程模式高清版+DEMO"显然是关于Java多线程设计模式的详细教程,很可能包含了理论讲解、代码示例以及实战DEMO。 在Java多线程编程中,了解和掌握以下知识点至关重要: 1. **线程的创建与启动...

    java多线程代码demo

    本示例代码集合("java多线程代码demo")涵盖了多线程的多种实现方式,包括Thread类和Runnable接口的使用,以及对死锁的理解与避免。通过以下详细解释,你可以深入了解Java多线程的原理和实践。 1. **Thread类**:...

    java多线程多点续传demo

    总的来说,`java多线程多点续传demo`是一个实现高效大文件下载的示例,利用Java的多线程机制和多点续传技术,提高了下载速度,同时也支持断点续传功能,使得在不稳定网络环境下也能顺利完成下载。通过分析`DownLoad....

    多线程demo/java多线程练习

    本项目"多线程demo/java多线程练习"旨在通过实际操作来深入理解和掌握多线程技术,同时模拟数据库操作,这在现代应用程序开发中至关重要。 1. **线程基础** - **创建线程**:Java提供了两种创建线程的方式,分别是...

    轻量级java多线程池demo

    在"轻量级java多线程池demo"中,可能使用了`java.util.concurrent`包中的`BlockingQueue`作为线程间的通信通道。每个线程(Actor)从队列中获取任务,执行任务并可能将结果放回队列,供其他线程继续处理。这种方式既...

    java 多线程synchronized互斥锁demo

    标题中的"java 多线程synchronized互斥锁demo"指的是一个示例,展示了如何在多线程环境下使用`synchronized`关键字创建互斥锁,确保同一时间只有一个线程可以访问特定的代码块或方法。 描述中的"一个多线程访问的同...

    JAVA多线程基础演练DEMO

    这个"JAVA多线程基础演练DEMO"提供了一些基础示例,帮助开发者更好地理解和掌握多线程的基本概念和用法。以下将详细讲解Java多线程的相关知识点: 1. **线程的创建** - **继承Thread类**:创建一个新类,继承自`...

    springMVC+多线程+kafka的 demo基于maven

    在本项目中,我们探索了如何将Spring MVC框架与多线程、线程池和Apache Kafka集成,构建一个高效的数据处理系统。以下是关于这些技术及其整合的详细知识点: 1. **Spring MVC**: - Spring MVC是Spring框架的一个...

    java多线程的条件对象和锁对象demo

    总结起来,`java多线程的条件对象和锁对象demo`这个例子展示了如何利用`ReentrantLock`和`Condition`来精细控制多线程的执行。它教导我们如何通过条件等待和信号机制实现线程间的协同工作,以及如何利用锁对象来保证...

    多线程,runtime测试demo

    通过运行这个测试Demo,开发者可以深入理解多线程编程中的挑战和解决方案,以及如何有效利用Runtime来操控Java应用程序的运行环境。记得打开注释并亲自运行,理论结合实践才能真正掌握这些知识。

    高并发多线程处理demo-java.rar

    1. **Java多线程**:Java通过`Thread`类和`Runnable`接口支持多线程编程。在这个示例中,可能会创建多个线程对象,每个对象负责处理队列中的一个任务,以实现并行执行。 2. **并发队列**:并发队列如`...

    java多线程demo

    总之,这个"java多线程demo"项目提供了全面的多线程编程实践,涵盖了基础的线程创建、线程同步、线程池以及高级的并发工具类的使用。通过分析和运行这些示例,开发者可以深入理解和掌握Java的多线程特性,提升并发...

    简单的java线程demo

    本示例"简单的Java线程demo"旨在帮助初学者理解如何在Java中创建和管理线程。 在Java中,有两种主要的方式来创建线程:继承Thread类和实现Runnable接口。下面我们将详细讨论这两个方法。 1. 继承Thread类: 当一个...

    多线程下载demo

    本文将详细解析"多线程下载demo"中的关键知识点,包括线程池的使用以及多线程下载的算法设计。 首先,线程池是Java等编程语言中管理线程的一种高效方式。它避免了频繁创建和销毁线程带来的性能开销,通过维护一组可...

    Java多线程并发执行demo代码实例

    "Java多线程并发执行demo代码实例" 在Java编程中,多线程并发执行是非常重要的概念,它可以提高程序的执行效率和响应速度。今天,我们通过一个demo代码实例来学习Java多线程并发执行的实现。 知识点1:泛型 在...

    多线程demo程序-轻松掌握多线程技术

    通过学习这个"多线程demo程序",你可以掌握如何在实践中创建、管理和控制线程,理解多线程编程的基本概念,以及如何解决可能出现的问题。这个项目中的ThreadProject可能是整个示例代码的主目录,包含了演示这些概念...

    Java Spring多线程demo代码

    在"Java Spring多线程demo代码"中,可能包含使用`@Async`和`@Scheduled`注解的示例,以及如何配置和自定义`ThreadPoolTaskExecutor`和`ThreadPoolTaskScheduler`的代码。通过这些示例,你可以学习到如何在Spring应用...

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    java项目史上最简单的多线程使用方法(demo)

    总之,"thread-test"项目提供了一个简单直观的多线程批量更新示例,涵盖了从线程创建到并发控制的各个方面,对于理解Java多线程在实际项目中的应用具有很高的参考价值。通过学习和实践这个项目,开发者可以更好地...

Global site tag (gtag.js) - Google Analytics