`
xijunhu
  • 浏览: 152392 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

线程与内部类

阅读更多
昨天面试的一道上机题
我做错了
题目是这样的,设计4个线程,两个加1,两个减1。
当时由于不知道内部类怎么用,就把线程都写成静态的了,回来看了一下内部类的用法。写了一下:
public class Threads {
    static int j=0;
	public static void main(String[] args){
		Threads a= new Threads();
		for(int i=0; i<2;i++)
		{
		Threads.ThreadA threadA = a.new ThreadA();
		threadA.start();
		Threads.ThreadB threadB = a.new ThreadB();
		threadB.start();
		}
	}
	class ThreadA extends Thread{
		
		public void run(){
			j++;
			System.out.println("+++"+j);
		}
	}
	
	class ThreadB extends Thread{
	
		public void run(){
			j--;
			System.out.println("---"+j);
		}
	}
}


执行那个结果
+++1
+++2
---1
---0

用concurrent包,简单一点。
public class Threads {
    static int j=0;
	public static void main(String[] args){
		ExecutorService ex = Executors.newFixedThreadPool(4);
		// 加一
		for (int i = 0; i < 2; i++) {   
			
            Runnable task = new Runnable() {   
                public void run() {   
                     ++j;
                     System.out.println("++"+j);
                }   
            };   
            // 往线程池中添加任务,线程开始处理这些任务   
            ex.execute(task);   
        }   
		
		// 减 一
		for (int i = 0; i < 2; i++) {   
            Runnable task = new Runnable() {   
                public void run() {   
                     --j;
                     System.out.println("--"+j);
                }   
            };   
            // 往线程池中添加任务,线程开始处理这些任务   
            ex.execute(task);   
        }   
		
        // 关闭线程池,不会阻塞主线程的执行【这里是main线程】   
		ex.shutdown();   

	}		
}


执行结果是
++2
++1
--1
--0

上面的是否有上面问题,哪位给指正一下。
发现,概念的东西记得再多,也不及亲自动手实践。

补充:对于thread和runnable的区别一直只限于,一个是继承thread类,一个是现实runnable接口,重来没有注意他们的创建的不同
ThreadA a = new ThreadA(); //Runnable实现
Thread myThread = new Thread(a);
myThread.start();

ThreadB b= new ThreadB(); //Thread实现
b.start();
分享到:
评论

相关推荐

    使用内部类实现线程

    NULL 博文链接:https://blueskylan.iteye.com/blog/336420

    易语言类内部多线程

    易语言类内部多线程源码,类内部多线程,call,StartClass,类_取类指针,类_取类成员指针,CreateThread_class,方法1,方法2,方法3,方法4,取类指针,qqq,zzz,CreateThread,CloseHandle,HeapAlloc,HeapFree,GetProcessHeap,...

    java线程内部类练习.rar

    java 线程练习,内部类,接口练习应用。

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存

    Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...

    易语言源码易语言类内部多线程源码.rar

    易语言源码易语言类内部多线程源码.rar 易语言源码易语言类内部多线程源码.rar 易语言源码易语言类内部多线程源码.rar 易语言源码易语言类内部多线程源码.rar 易语言源码易语言类内部多线程源码.rar 易语言源码...

    多线程线程间通信,可用于控制线程内部函数

    多线程线程间通信,可用于控制线程内部函数,做处理......................................................

    易语言远程线程注入类模块

    易语言远程线程注入类模块源码,远程线程注入类模块,设置超时时间,私_创建远程线程,打开进程号,取内部句柄,取进程ID,关闭打开句柄,远程申请内存,远程申请内存_文本,远程释放内存,远程执行代码,生成调用代码_数组,执行...

    java中的多线程内部类实现数据共享和Runnable实现数据共享借鉴.pdf

    java中的多线程内部类实现数据共享和Runnable实现数据共享借鉴.pdf

    java中的多线程内部类实现数据共享和Runnable实现数据共享归类.pdf

    java中的多线程内部类实现数据共享和Runnable实现数据共享归类.pdf

    .Net 多线程详解

    • 受托管的线程与 Windows线程 • 前台线程与后台线程 • 名为BeginXXX和EndXXX的方法是做什么用的 • 异步和多线程有什么关联 WinForm多线程编程篇 • 我的多线程WinForm程序老是抛出...

    PB9多线程Demo

    注意事项: 1、主进程传入的对象或变量不管...2、“任务线程类”中有一个内部timing类,监控自己是否执行完成,会改标志。“任务管理类”也有一个timing监控“任务信息类”和“任务线程类”的情况,把完成的结束。

    线程同步方法,和线程创建方法

    线程隶属于进程,线程是属于进程内部的程序流,目前主流的操作系统都支持多进程,而 每一个进程的内部又可以支持多线程; 进程是重量级的,每个进程都需要独立的内存空间等,因此新建进程对系统资源的消耗比 较大; ...

    Java内部类:你真得了解方法内部类吗?

    java内部类,相信很多人都使用过内部类,新建线程使用的匿名内部类,但是有很多人对内部类的一些概念处于模糊阶段,比如为什么方法内部类引用方法参数,方法参数必须设置为final,所以本文系统得整理了一下内部类...

    java实现单例模式-静态内部类模式(线程安全)

    静态内部类模式结合了懒汉模式和饿汉模式的优点,既实现了延迟加载,又保证了线程安全。

    C++类中创建多线程实现本地和远程打印

    自己随便写的一个类,实现远程和本地打印字符,控制打印等级功能!

    易语言源码类内部多线程.rar

    易语言编程源码,大家可以参考学习

    当析构函数遇到多线程── C++ 中线程安全的对象回调

    编写线程安全的类不是难事,用同步原语保护内部状态即可。但是对象的生与死不能由对象自身拥有的互斥器来保护。如何保证即将析构对象 x 的时候,不会有另一个线程正在调用 x 的成员函数?或者说,如何保证在执行 x ...

    多线程编程(完整版)

     线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随...

    java学习多线程处理

    线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。 线程的特点:一个进程可以包含多个线程,而一个线程至少要有一个父进程。 线程可以有自己的堆栈,程序计数器和局部变量。 线程与父进程的其他...

    C#线程锁介绍源码

    只有可以被多线程访问的共享资源才需要考虑锁定,比如静态变量,再比如某些缓存中的值,而属于线程内部的变量不需要锁定。 2)多使用lock,少用Mutex 如果你一定要使用锁定,请尽量不要使用内核模块的锁定机制,...

Global site tag (gtag.js) - Google Analytics