精华内容
下载资源
问答
  • 本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下(一)步骤1.定义实现Runnable接口2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。3.通过Thread类建立线程对象...

    本文为大家分享了Java多线程实现Runnable方式的具体方法,供大家参考,具体内容如下

    (一)步骤

    1.定义实现Runnable接口

    2.覆盖Runnable接口中的run方法,将线程要运行的代码存放在run方法中。

    3.通过Thread类建立线程对象。

    4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数。

    为什么要讲Runnable接口的子类对象传递给Thread的构造方法。因为自定义的方法的所属的对象是Runnable接口的子类对象。

    5.调用Thread类的start方法开启线程并调用Runnable接口子类run方法。

    (二)线程安全的共享代码块问题

    目的:程序是否存在安全问题,如果有,如何解决?

    如何找问题:

    1.明确哪些代码是多线程运行代码。

    2.明确共享数据

    3.明确多线程运行代码中哪些语句是操作共享数据的。

    class Bank{

    private int sum;

    public void add(int n){

    sum+=n;

    System.out.println("sum="+sum);

    }

    }

    class Cus implements Runnable{

    private Bank b=new Bank();

    public void run(){

    synchronized(b){

    for(int x=0;x<3;x++)

    {

    b.add(100);

    }

    }

    }

    }

    public class BankDemo{

    public static void main(String []args){

    Cus c=new Cus();

    Thread t1=new Thread(c);

    Thread t2=new Thread(c);

    t1.start();

    t2.start();

    }

    }

    或者第二种方式,将同步代码synchronized放在修饰方法中。

    class Bank{

    private int sum;

    public synchronized void add(int n){

    Object obj=new Object();

    sum+=n;

    try{

    Thread.sleep(10);

    }catch(Exception e){

    e.printStackTrace();

    }

    System.out.println("sum="+sum);

    }

    }

    class Cus implements Runnable{

    private Bank b=new Bank();

    public void run(){

    for(int x=0;x<3;x++)

    {

    b.add(100);

    }

    }

    }

    public class BankDemo{

    public static void main(String []args){

    Cus c=new Cus();

    Thread t1=new Thread(c);

    Thread t2=new Thread(c);

    t1.start();

    t2.start();

    }

    }

    总结:

    1.在一个类中定义要处理的问题,方法。

    2.在实现Runnable的类中重写run方法中去调用已经定义的类中的要处理问题的方法。

    在synchronized块中接受要处理问题那个类的对象。

    3.在main方法中去定义多个线程去执行。

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

    展开全文
  • java多线程如何创建多个多线程java中如何启动一个新的线程有时候往往直到离开的时候,才能知道自己多喜欢一座城。很多事情只有经历之后才知道,同一件事情,和不同的人也会是另外一个世界时间就是这个样子,徜徉其中...

    java多线程如何创建多个多线程

    java中如何启动一个新的线程有时候往往直到离开的时候,才能知道自己多喜欢一座城。很多事情只有经历之后才知道,同一件事情,和不同的人也会是另外一个世界时间就是这个样子,徜徉其中尚觉得慢,一旦定睛回望,弹指之间。

    java多线程的情况下如何进行调试?

    小编用debug停下一个线程以后,发现另一个线程仍然继续工作,小编所要的另一她洗干净了头发,站在晌午的太阳下等你,头微微向左偏,湿发似春水畅流在左边闪闪发光。长发干了,柔软清凉,你还没来。后来,她洗完头依旧不用吹风筒呜呜呜地吹干,她剪了短发,变得清瘦,不再需要太阳来晒头发。她也不等你了。

    Java中关于如何实现多线程消息队列的实例少女站在樱花树下,漫天的樱瓣在风中飞舞,在那个月光的照耀里,少女的哀伤化作了容颜一角。

    java中的消息队列 消息队列是线程间通讯的手段: import java.util.* public class MsgQueue{ private Vector queue = null; public MsgQueue(){ queue = new Vector(); } public synchronized void send(Object o) { queue.addElement(o); } pu就算有一天小编的眼睛看不见了,小编还是会认出你,小编的心会看到你。

    Java如何实现多线程同步?

    现在主线程到了某个位置时创建并启动了3个子线程:t等一个不爱你的人,就像在夏天里等雪,在冬天里等花开。小编不等你,等自己死心。

    //解决方案-1 设置3把锁, 然后把锁们应用到所有线程中 (涉及到synchronized wait notify等, 嫌麻烦. 略) 解决方案-2 设置3个全局共享的信号标记(信号灯) + 3子线程分别占用标记1 2 3 + 主线程轮询/等待 (简洁明快 推荐) //解决方案-2 实现如下: 人们大多数只对有安全度的人发脾气,因为在那个安全度之内,你潜意识知道对方不会离开你。

    如何实现springMVC的多线程并发?

    实现springMVC的多线程并发: 小编不敢说自己一生都会喜欢你,但至少在能看见你的岁月里只想对你一个人好。

    ThreadLocal为解决多线程程序的并发问题提供了一种新的思路 与其在别人的生活里跑龙套,不去精彩的做自己。

    对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。

    java多线程都有几种方式实现??

    有三种: (1)继承Thread类,重写run函数 创建: class xx extends Thread{ public void run(){ Thread.sleep(1000)//线程休眠1000毫秒,sleep使线程进入Block状态,并释放资源 }} 开启线程: 对象.start()//启动线程。

    Java如何实现线程之间的互斥

    临界区(Critical Section):适合一个进程内的多线程访问公共区域或代码段时使用 Java如何实现线程之间的互斥 互斥量 (Mutex):适合不同进程内多线程访问公共区域或代码段时使用,与临界区相似。 事件(Event):通过线程间触发事件实现同步互小编一生气就想买东西,一买东西就得花钱,一花钱钱就少,钱一少小编就生气。。。

    以上就是四十五资源网为大家整理的java如何实现多线程 JAVA中如何利用多线程同时运行多个方法?内容,如果觉得本站更新的资源对您有帮助 不要忘记分享给您身边的朋友哦!

    展开全文
  • 1.Java多线程实现的方式有四种:1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通过Callable和FutureTask创建线程4.通过线程池创建...

    1.Java多线程实现的方式有四种:

    1.继承Thread类,重写run方法

    2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target

    3.通过Callable和FutureTask创建线程

    4.通过线程池创建线程

    2.Thread实现方式

    继承Thread类,重写run()方法,创建Thread对象调用start()方法启动线程。

    public class ThreadDemo extendsThread {

    @Overridepublic voidrun() {int t = 1;for (int i = 0; i < 10; i++) {

    System.out.println(Thread.currentThread().getName()+ " " + (t++));

    }

    }public static voidmain(String[] args) {

    ThreadDemo td1= newThreadDemo();

    ThreadDemo td2= newThreadDemo();

    td1.setName("Thread1");

    td2.setName("Thread2");

    td1.start();

    td2.start();

    }

    }

    结果:

    0921000ce0bef94914faea4471515cad.png

    3.Runnable实现方式

    实现Runnable接口,实现run()方法,接口的实现类的实例作为Thread的target传入带参的Thread构造函数,调用start()方法启动线程。

    public class RunnableDemo implementsRunnable {

    @Overridepublic voidrun() {int t = 1;for (int i = 0; i < 10; i++) {

    System.out.println(Thread.currentThread().getName()+ " " + (t++));

    }

    }public static voidmain(String[] args) {

    RunnableDemo rd= newRunnableDemo();

    Thread tr1= newThread(rd);

    Thread tr2= newThread(rd);

    tr1.setName("Thread1");

    tr2.setName("Thread2");

    tr1.start();

    tr2.start();

    }

    }

    }

    结果:

    dec2dbbdf595237924134d590d7bec0d.png

    3.Callable和FutureTask创建线程实现方式

    (1)创建Callable接口的实现类 ,并实现Call方法;

    (2)创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了Callable对象的Call方法的返回值 ;

    (3)使用FutureTask对象作为Thread对象的target创建并启动线程;

    (4)调用FutureTask对象的get()来获取子线程执行结束的返回值。

    importjava.util.concurrent.Callable;importjava.util.concurrent.ExecutionException;importjava.util.concurrent.FutureTask;public class CallableFutureTaskDemo implements Callable{

    @Overridepublic Integer call() throwsException {int t = 1;for (int i = 0; i < 10; i++) {

    System.out.println(Thread.currentThread().getName()+ " " + (t++));

    }returnt;

    }public static voidmain(String[] args) {

    Callable cftd1 = newCallableFutureTaskDemo();

    Callable cftd2 = newCallableFutureTaskDemo();

    FutureTask ft1 = new FutureTask<>(cftd1);

    FutureTask ft2 = new FutureTask<>(cftd2);

    Thread t1= newThread(ft1);

    Thread t2= newThread(ft2);

    t1.setName("Thread1");

    t2.setName("Thread2");

    t1.start();

    t2.start();try{

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

    }catch(InterruptedException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }catch(ExecutionException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    结果:

    a305bf4e1d621149f46cbfc205ca7d13.png

    5.线程池实现方式

    importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;public class ExecutorDemo implementsRunnable {private static int task_num = 2; //任务数量

    @Overridepublic voidrun() {int t = 1;for (int i = 0; i < 10; i++) {

    System.out.println(Thread.currentThread().getName()+ " " + (t++));

    }

    }public static voidmain(String[] args) {

    ExecutorService executorService= Executors.newFixedThreadPool(3);for (int i = 0; i

    ExecutorDemo ed= newExecutorDemo();

    executorService.execute(ed);

    }

    executorService.shutdown();

    }

    }

    结果:

    3ec710507c8a69309707635f12061bd6.png

    java里面的线程池的顶级接口是Executor,Executor并不是一个线程池,而只是一个执行线程的工具,而真正的线程池是ExecutorService。

    java中的有哪些线程池?

    1.newCachedThreadPool创建一个可缓存线程池程

    2.newFixedThreadPool 创建一个定长线程池

    3.newScheduledThreadPool 创建一个定长线程池

    4.newSingleThreadExecutor 创建一个单线程化的线程池

    这里的例子用到的就是newFixedThreadPool 。

    6.总结

    (1)实现Runnable接口比继承Thread类更具有优势!Runnable接口适合多个相同的程序代码的线程去处理同一个资源,可以避免java中的单继承的限制,增加程序的健壮性,而且代码可以被多个线程共享,实现代码和数据独立。

    (2)使用线程池可以减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务,可以根据系统的承受能力,调整线程池中工作线线程的数量。

    (3)实际应用中,可以通过一个boolean标志位来结束线程。

    (4)ExecutorService、Callable都是属于Executor框架。返回结果的线程是在JDK1.5中引入的新特征,还有Future接口也是属于这个框架,有了这种特征得到返回值更方便。

    执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的值(由泛型决定)了。get()方法是阻塞的,即线程无返回结果,get方法会一直等待。此外,ExecutoreService提供了submit()方法,传递一个Callable或Runnable,返回Future。如果Executor后台线程池还没有完成Callable的计算,这调用返回Future对象的get()方法,会阻塞直到计算完成。

    10281572.html

    展开全文
  • 一道经典的面试题目:两个线程,分别打印AB,其中线程A打印A,线程B打印B,各打印10次,使之出现ABABABABA.. 的效果package com.shangshe.path;public class ThreadAB {/*** @param args*/public static void main...

    一道经典的面试题目:两个线程,分别打印AB,其中线程A打印A,线程B打印B,各打印10次,使之出现ABABABABA.. 的效果

    package com.shangshe.path;

    public class ThreadAB {

    /**

    * @param args

    */

    public static void main(String[] args) {

    final Print business = new Print();

    new Thread(new Runnable() {

    public void run() {

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

    business.print_A();

    }

    }

    }).start();

    new Thread(new Runnable() {

    public void run() {

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

    business.print_B();

    }

    }

    }).start();

    }

    }

    class Print {

    private boolean flag = true;

    public synchronized void print_A () {

    while(!flag) {

    try {

    this.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    System.out.print("A");

    flag = false;

    this.notify();

    }

    public synchronized void print_B () {

    while(flag) {

    try {

    this.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    System.out.print("B");

    flag = true;

    this.notify();

    }

    }

    由上面的例子我们可以设计出3个线程乃至于n个线程的程序,下面给出的例子是3个线程,分别打印A,B,C 10次,使之出现ABCABC.. 的效果

    public class ThreadABC {

    /**

    * @param args

    */

    public static void main(String[] args) {

    final Print business = new Print();

    new Thread(new Runnable() {

    public void run() {

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

    business.print_A();

    }

    }

    }).start();

    new Thread(new Runnable() {

    public void run() {

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

    business.print_B();

    }

    }

    }).start();

    new Thread(new Runnable() {

    public void run() {

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

    business.print_C();

    }

    }

    }).start();

    }

    }

    class Print {

    private boolean should_a = true;

    private boolean should_b = false;

    private boolean should_c = false;

    public synchronized void print_A () {

    while(should_b || should_c) {

    try {

    this.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    System.out.print("A");

    should_a = false;

    should_b = true;

    should_c = false;

    this.notifyAll();

    }

    public synchronized void print_B () {

    while(should_a || should_c) {

    try {

    this.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    System.out.print("B");

    should_a = false;

    should_b = false;

    should_c = true;

    this.notifyAll();

    }

    public synchronized void print_C () {

    while(should_a || should_b) {

    try {

    this.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    System.out.print("C");

    should_a = true;

    should_b = false;

    should_c = false;

    this.notifyAll();

    }

    }

    再一次证明了软件工程的重要性了;在多线程程序中,应该说在程序中,我们应该把那些业务逻辑代码放到同一个类中,使之高内聚,低耦合

    展开全文
  • Java多线程实现及四种线程池和new Thread的使用及差别 线程的生命周期分为:new,runnable,running,block,termate. java多线程的几种实现方式: 继承Thread类,重写run方法 实现Runnable接口,重写run方法,实现...
  • Java多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承...
  • 在楼上基础上大概改一下,增加同步处理。public class Test extends Thread {static int n = 0;private int startNum = 0 ;public Test (int sn){this.startNum = sn ;}public static synchronized void addSum (int...
  • 继承Thread类创建线程Thread类本质上是实现了Runnable接口的一个实例,代表一个...这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如...
  • Java实现多线程画图

    2021-03-17 15:30:35
    Java实现多线程画图目录功能分析初步实现添加监听器创建多线程实现多线程画图1,功能分析这个程序的基本思路就是:展示一个JFrame界面,给JFrame添加我们自己实现的鼠标事件监听器,记录鼠标事件点击时鼠标所在...
  • import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;/*** A...
  • 多线程下载文件的思路:1.首先获取到文件的总大小获取文件大小的方式是通过网络读取,getContentLength()即可获取到文件的大小,使用RandomAccessFile()支持随机访问2.根据所准备的线程数据,计算每一个线程需要下载...
  • /**通过实现Runnable接口实现多线程Java程序只允许使用单一继承,即一个子类只能有一个父类所以在Java类中 如果一个类继承了某一个类。同时又想要采用多线程的技术的时候就不能用Thread类产生线程 所以这里要用...
  • Java中Timer是java.util包中的一个工具类,提供了定时器的功能。我们可以创建一个Timer对象,然后调用其schedule方法在某个特定的时间去执行一个特定的任务。并且你可以让其以特定频率一直执行某个任务,这个任务...
  • 实现一个模拟售票的场景,有 3 个站台,30张票,使用多线程实现 2. 创建一个 Station 类 要点: 构造函数设置线程名 使用静态类型存储余票数 使用 synchronized 锁,不同的窗口使用一个锁 使用延时模拟网络延迟...
  • private static List queueCache = new LinkedList();2、定义队列缓冲池最大消息数,如果达到该值,...3、定义检出线程,如果队列缓冲池没有消息,那么检出线程线程等待中new Thread(){public void run(){while(...
  • java多线程查询

    千次阅读 2021-03-05 17:06:15
    标签:由于最近工作遇到性能问题,尝试研究用多线程实现,结果速度快了好几倍下面是多线程查询的部分代码,提供给大家参考下:线程类:带返回值的类要实现Callable接口,具体业务逻辑没有实现,只是写了个空方法在...
  • JAVA平台,实现异步调用的角色有如下三个角色:调用者 提货单真实数据一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕,不需要等蛋糕做...
  • java多线程有几种实现方法,都是什么?同步有几种实java多线程实现方法有两种:1.直接继承thread类;2.实现runnable接口;同步的实现方法有五种:1.同步方法;2.同步代码块;3.使用特殊域变量(volatile)实现线程...
  • 认识多任务、多进程、单线程、多线程要认识多线程就要从操作系统的原理说起。现在的操作系统都是多任务操作系统,每个运行的任务就是操作系统所做的一件事情,比如你在听歌的同时还在用MSN和好友聊天。听歌和聊天...
  • 2006 年 8 月 14 日Java 提供了语言级别的线程支持,所以在 Java 中使用多线程相对于 C,C++ 来说更简单便捷,但...在本文中,我们将讨论如何实现一个 Java 多线程的运行框架以及我们是如何来控制线程的并发同步以及...
  • 实训学习的多线程播放音频文件,写在这里以后还能看看 希望对各位读者能有帮助 建立PlaySound class类文件 复制下面的代码: ( 第一行的package com.briup;要和你自己建立的包名一样) 代码中的资源文件名为res,其他...
  • Java多线程详细实现方案

    千次阅读 2021-06-12 20:50:46
    JAVA多线程(JAVA.Thread) ​ 概念简介 任务:就是你要完成的事情就是叫做任务 单线程:线程只能一个接着一个处理任务,只有在完成上一个任务之后才能开始下一个任务 多线程:程序可以同时处理多个任务 进程:可以...
  • java多线程其实在工作中接触的并不是很多,偶尔用一下,但是这个特性又是开发工程走向大牛必须要掌握的知识点,所以花几天时间整理了一下,一方便梳理知识点,另一方面也是为了以后更好地使用。 一. 线程和进程 ...
  • 本文介绍了浅谈Java的两种多线程实现方式,分享给大家。具有如下:一、创建多线程的两种方式Java中,有两种方式可以创建多线程:1 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中2 通过实现...
  • JAVA平台,实现异步调用的角色有如下三个角色:调用者 提货单 真实数据一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据.去蛋糕店买蛋糕,不需要等蛋糕做...
  • 线程同步是Java高并发的核心内容之一,线程同步目的是保证多线程以安全的方式按照一定的次序执行以满足对互斥资源的请求,从而协作完成某项任务,其重点是保证线程安全。 所谓线程安全,是多线程操纵共享数据的时候...
  • 1、使用Lambda表达式实现多线程public static void main(String[] args) {//使用匿名内部类的方式,实现多线程new Thread(new Runnable() {@Overridepublic void run() {System.out.println(Thread.currentThread()....
  • 不过这种多线程请求是基于在每次调用get方法时创建一个HttpClient实例实现的。每个HttpClient实例使用一次即被回收。这显然不是一种最优的实现。HttpClient提供了多线程请求方案,可以查看官方...
  • 假设有200张票,用4个线程去订票,不能有两个或者以上的线程订到了 同一个票(原因就不说了),当最后一张票卖掉的时候结束,再订就抛 异常提示出票卖完了。 业务分析 1、需要创建一个车票类,初始化票,卖票的接口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 995,742
精华内容 398,296
关键字:

多线程java实现

java 订阅