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

关于java 多线程线程Thread 共享资源的简单用法和理解

 
阅读更多
最近看到JAVA里面对资源共享引入的synchronized的同步机制,我们都知道Thread这个类的构造函数里面有类似一个实现Runnable这个接口的类,这个类可以存放着多个线程之间的资源共享,比如:

    public Thread(Runnable target) {
        init(null, target, "Thread-" + nextThreadNum(), 0);
    }


这个代码里面可以看到我们可以直接写一个自己的类去实现这个接口Runnable,然后创建每个Thread用一份,就可以达到了资源共享了,比如:

        Runable_demo run = new Runable_demo();
        // TODO Auto-generated method stub
        new Thread(run,"Tread one").start();
        new Thread(run,"Tread two").start();
        new Thread(run,"Tread three").start();
        new Thread(run,"Tread four").start();
        new Thread(run,"Tread five").start();
        new Thread(run,"Tread six").start();


这里强调用一点,当然对于在自己实现的Runable_demo这个类里面可以直接定义一些private 非static的数据了,但是这里有个注意的是对于一个类的static变量,他们不管是不是重新new,他的资源都是共享的,比如:

        new Thread(new Runable_demo(),"Tread one").start();
        new Thread(new Runable_demo(),"Tread two").start();
        new Thread(new Runable_demo(),"Tread three").start();
        new Thread(new Runable_demo(),"Tread four").start();
        new Thread(new Runable_demo(),"Tread five").start();
        new Thread(new Runable_demo(),"Tread six").start();


/**
 * 
 */
package thread_test;

/**
 * @author Administrator
 *
 */
public class Runable_demo implements Runnable{

    private static int g_value = 100;
    /**
     * @param args
     */
    public static void main(String[] args) {
        
        // TODO Auto-generated method stub
        new Thread(new Runable_demo(),"Tread one").start();
        new Thread(new Runable_demo(),"Tread two").start();
        new Thread(new Runable_demo(),"Tread three").start();
        new Thread(new Runable_demo(),"Tread four").start();
        new Thread(new Runable_demo(),"Tread five").start();
        new Thread(new Runable_demo(),"Tread six").start();

    }

    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    @Override
    public void run() 
    {
        while(true)
        {
            speical_print();
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    synchronized void speical_print()
    {
        if(g_value > 0)
            System.out.println(Thread.currentThread().getName()+" : ........ value = " + g_value--);
    }

}
分享到:
评论

相关推荐

    java并发编程:线程基础

    本资源致力于向您介绍 Java 并发编程中的线程基础,涵盖了多线程编程的核心概念、线程的创建和管理,以及线程间通信的基本方法。通过深入学习,您将建立扎实的多线程编程基础,能够更好地理解和应用多线程编程。 多...

    java学习多线程处理

    多线程开发的优势:改善用户体验,提高资源利用率(单线程的处理效率低下) 线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一...

    Java高级程序设计-多线程(二).pptx

    本章内容 掌握同步代码块的使用 掌握同步方法的使用 理解线程死锁 掌握 ThreadLocal 类的使用 使用多线程模拟猴子采花 使用同步方法模拟购票 使用多线程模拟购物订单生成 使用 ThreadLocal 类模拟银行取款 Java高级...

    Java中的线程Thread总结

    可通过这种方法实现多个线程的资源共享。  线程的生命周期:  1.新建状态(New):用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存  2.绪状态(Runnable):当一个线程...

    Java高并发编程详解:多线程与架构设计 (Java核心技术系列)

    部分主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信,以及如何保护共享资源等内容,它是深入学习多线程内容的基础。 第二部分引入了ClassLoader,这是因为ClassLoader与线程不无关系,...

    线程的基本概念、线程类、任务类、线程优先级、sleep()方法、yield()方法、join方法、interrupt()方法

    **线程 与 线程 的关系:**在同一个进程里,多个线程共享内存空间和系统资源 一个进程中包含多个线程,只有一个主线程 线程的休眠是指让线程暂时停止执行一段时间,然后再继续执行。在休眠期间,线程不会占用CPU资源...

    Java开发技术大全(500个源代码).

    commSource.java 一个共享资源的类 demoSynchrony.java 演示线程的同步 setDataThread.java 设置数据的线程类 readDataThread.java 读取数据的线程类 demoEnhanceThread.java 使用自己定义的线程类示例 ...

    java-os.rar_多进程os

    此次操作系统,本人使用java中的多线程来模拟多进程共享临界资源。java中多线程就是一个类或一个程序执行或管理多个线程执行任务的能力,每个线程可以独立于其他线程而独立运行,当然也可以和其他线程协同运行,一个...

    java笔试题大集合及答案(另附各大公司笔试题)

    60、java中有几种方法可以实现一...答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify 67、线程的基本概念、线程的基本状态以及状态之间的关系

    javabiginteger源码-MultiThreadMode:多线程模式

    优点:不需使用synchronized保护类的属性,适用于类被多个线程共享,且有可能被频繁访问。 标准类中mutable类:StringBuffer 标准类中Immutable类:String、BigInteger、BigDecimal、Pattern、基本类型的包装类 java...

    java 面试题 总结

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数...

    java程序设计实验指导代码

    第13章 多线程编程 13.1 预备知识 13.2 实验1 使用Thread类创建4线程程序 13.3 实验2 一个实现Runnable接口的小应用程序 13.4 实验3 线程同步与资源共享 13.5 实验4 wait( )和notify( )挂起与恢复线程 第14章 ...

    JAVA面试题最全集

    谈谈java多线程 23.谈谈文件加密技术 24.软件开发生命周期 25.路由协议种类及特点 26.java的awt和swing组件的GUI设计的关键 27.对于java流的认识 28.简单描述一下awt与swing区别。 29.简述java编程中事件处理...

    Java并发编程(学习笔记).xmind

    (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 (2)建模简单:通过使用线程可以讲复杂并且异步的工作流进一步分解成一组简单并且同步的工作流,每个工作流在一个单独的线程...

    java面试宝典

    70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? 17 72、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 18 73...

    关于JAVA面试的100题及其答案

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    java面试题

    答:多线程有两种实现方法,一种是继承Thread类或者实现Runnable接口。同步就是在方法返回类型后面加上synchronized。 c#中的委托,事件是不是委托? 答:委托就是将方法作为一个参数带入另一个方法叫做委托,事件...

    超级有影响力霸气的Java面试题大全文档

     方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和...

    java,c/c++,php,c#安全编码规范

    2.6 多线程编程 23 2.6.1 确保共享变量的可见性 23 2.6.2 确保共享变量的操作是原子的 24 2.6.3 不要调用Thread.run(),不要使用Thread.stop()以终止线程 26 2.6.4 确保执行阻塞操作的线程可以终止 26 2.6.5 ...

    java经典面试2010集锦100题(不看你后悔)

    C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以表达为:对外一个接口,内部多种实现。Java语言支持两种多态:运行时多态和编译...

Global site tag (gtag.js) - Google Analytics