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

代码备忘录

    博客分类:
  • java
阅读更多
 
List 迭代
private final List<Entry> entries = new CopyOnWriteArrayList<Entry>();

for (ListIterator<Entry> i = entries.listIterator(); i.hasNext();) {
            Entry base = i.next();
            if (base.getName().equals(baseName)) {
                register(i.previousIndex(), new EntryImpl(name, filter));
                break;
            }
        }


确认一个参数是否为空
if (name == null) {
            throw new IllegalArgumentException("name");
        }




非静态内部类调为外部类
public void addAfter(String name, IoFilter filter) {
            DefaultIoFilterChainBuilder.this.addAfter(getName(), name, filter);
        }



异常处理类
public class DefaultExceptionMonitor extends ExceptionMonitor {
    private final static Logger LOGGER = LoggerFactory.getLogger(DefaultExceptionMonitor.class);

    /**
     * {@inheritDoc}
     */
    @Override
    public void exceptionCaught(Throwable cause) {
        if (cause instanceof Error) {
            throw (Error) cause;
        }

        LOGGER.warn("Unexpected exception.", cause);
    }
}


    异常单例句柄
    public abstract class ExceptionMonitor {
    private static ExceptionMonitor instance = new DefaultExceptionMonitor();

    /**
     * Returns the current exception monitor.
     */
    public static ExceptionMonitor getInstance() {
        return instance;
    }

    /**
     * Sets the uncaught exception monitor.  If <code>null</code> is specified,
     * the default monitor will be set.
     *
     * @param monitor A new instance of {@link DefaultExceptionMonitor} is set
     *                if <tt>null</tt> is specified.
     */
    public static void setInstance(ExceptionMonitor monitor) {
        if (monitor == null) {
            monitor = new DefaultExceptionMonitor();
        }
        
        instance = monitor;
    }

    /**
     * Invoked when there are any uncaught exceptions.
     * 
     * @param cause The caught exception
     */
    public abstract void exceptionCaught(Throwable cause);
}

 name thread
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.mina.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A {@link Runnable} wrapper that preserves the name of the thread after the runnable is
 * complete (for {@link Runnable}s that change the name of the Thread they use.)
 *
 * @author <a href="http://mina.apache.org">Apache MINA Project</a>
 */
public class NamePreservingRunnable implements Runnable {
    private final static Logger LOGGER = LoggerFactory.getLogger(NamePreservingRunnable.class);

    /** The runnable name */
    private final String newName;
    
    /** The runnable task */
    private final Runnable runnable;

    /**
     * Creates a new instance of NamePreservingRunnable.
     *
     * @param runnable The underlying runnable
     * @param newName The runnable's name
     */
    public NamePreservingRunnable(Runnable runnable, String newName) {
        this.runnable = runnable;
        this.newName = newName;
    }

    /**
     * Run the runnable after having renamed the current thread's name 
     * to the new name. When the runnable has completed, set back the 
     * current thread name back to its origin. 
     */
    public void run() {
        Thread currentThread = Thread.currentThread();
        String oldName = currentThread.getName();

        if (newName != null) {
            setName(currentThread, newName);
        }

        try {
            runnable.run();
        } finally {
            setName(currentThread, oldName);
        }
    }

    /**
     * Wraps {@link Thread#setName(String)} to catch a possible {@link Exception}s such as
     * {@link SecurityException} in sandbox environments, such as applets
     */
    private void setName(Thread thread, String name) {
        try {
            thread.setName(name);
        } catch (SecurityException se) {
            if (LOGGER.isWarnEnabled()) {
                LOGGER.warn("Failed to set the thread name.", se);
            }
        }
    }
}



检查死锁

private void checkDeadLock() {
        // Only read / write / connect / write future can cause dead lock. 
        if (!(this instanceof CloseFuture || this instanceof WriteFuture ||
              this instanceof ReadFuture || this instanceof ConnectFuture)) {
            return;
        }
        
        // Get the current thread stackTrace. 
        // Using Thread.currentThread().getStackTrace() is the best solution,
        // even if slightly less efficient than doing a new Exception().getStackTrace(),
        // as internally, it does exactly the same thing. The advantage of using
        // this solution is that we may benefit some improvement with some
        // future versions of Java.
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

        // Simple and quick check.
        for (StackTraceElement s: stackTrace) {
            if (AbstractPollingIoProcessor.class.getName().equals(s.getClassName())) {
                IllegalStateException e = new IllegalStateException( "t" );
                e.getStackTrace();
                throw new IllegalStateException(
                    "DEAD LOCK: " + IoFuture.class.getSimpleName() +
                    ".await() was invoked from an I/O processor thread.  " +
                    "Please use " + IoFutureListener.class.getSimpleName() +
                    " or configure a proper thread model alternatively.");
            }
        }

        // And then more precisely.
        for (StackTraceElement s: stackTrace) {
            try {
                Class<?> cls = DefaultIoFuture.class.getClassLoader().loadClass(s.getClassName());
                if (IoProcessor.class.isAssignableFrom(cls)) {
                    throw new IllegalStateException(
                        "DEAD LOCK: " + IoFuture.class.getSimpleName() +
                        ".await() was invoked from an I/O processor thread.  " +
                        "Please use " + IoFutureListener.class.getSimpleName() +
                        " or configure a proper thread model alternatively.");
                }
            } catch (Exception cnfe) {
                // Ignore
            }
        }
    }
分享到:
评论
1 楼 lyy3323 2010-08-06  
这些有什么特殊的吗?

相关推荐

    代码备忘录(经典的代码备忘录)

    《代码备忘录:经典工具的深度解析与应用》 在快速发展的信息技术领域,程序员们经常需要处理大量的代码,为了提高工作效率和代码管理能力,一款优秀的代码备忘录软件是必不可少的。本文将深入探讨“代码备忘录”这...

    代码备忘录,代码管理器

    《代码备忘录与代码管理器:框架2.0的应用深度解析》 在软件开发过程中,代码管理是一项至关重要的任务,它关乎项目的可维护性、团队协作效率以及代码质量。"代码备忘录"和"代码管理器"是为此目标而设计的工具,...

    微信小程序 小工具类 备忘录 (源代码+截图)

    微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源...

    小程序源码 备忘录 (代码+截图)

    小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+...

    备忘录代码

    【标题】"备忘录代码"的描述指出这是一个简洁易懂的备忘录应用程序的代码实现,它可能是一个基础但实用的工具,适用于Android平台,考虑到标签为"android"。在Android开发中,备忘录应用通常是用于创建、查看和管理...

    微信小程序 备忘录 (源码)

    微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小...

    Android 备忘录源码.rar

    本文将深入探讨如何基于Android平台开发一个备忘录应用,通过分析“Android 备忘录源码.rar”中的代码,我们可以学习到以下几个关键知识点: 1. **用户界面设计**:从项目中包含的图片资源(如1_120916130147_1.png...

    微信小程序源码 备忘录(学习版)

    微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习...

    Android程序研发源码Android 备忘录源码.zip

    这份"Android程序研发源码Android 备忘录源码.zip"包含了一个完整的备忘录应用的源代码,可以帮助开发者深入理解Android应用的构建过程。下面我们将详细探讨其中涉及的关键技术和实践。 1. **AndroidManifest.xml**...

    java设计模式-备忘录模式源代码

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前...通过使用备忘录模式,开发者可以灵活地处理对象状态的变更,同时保持代码的简洁和可维护性。

    Android代码-备忘录源码.zip

    这个名为"Android代码-备忘录源码.zip"的压缩包文件很可能包含了一个完整的备忘录应用的源代码,这为我们深入学习Android开发提供了一个很好的实例。以下是基于这个描述可能涵盖的一些关键知识点: 1. **Android ...

    微信小程序推荐demo:备忘录:适用1028版本(源代码+截图)

    微信小程序推荐demo:备忘录:适用1028版本(源代码+截图)微信小程序推荐demo:备忘录:适用1028版本(源代码+截图)微信小程序推荐demo:备忘录:适用1028版本(源代码+截图)微信小程序推荐demo:备忘录:适用1028版本...

    备忘录模式代码示例

    在我们的示例代码中,可能有一个名为`Originator`的类,它具有多个属性来表示其状态,并提供方法来创建和应用备忘录。 ```python class Originator: def __init__(self, state): self._state = state def set_...

    C#备忘录模式 代码例子

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...

    安卓备忘录源码zip格式

    本资源提供的是一款备忘录应用的源代码,以ZIP格式压缩打包,供开发者学习和参考。 【描述】中提到的"源码安卓备忘录开发",意味着这是一个完整的应用程序项目,包含了从界面设计到功能实现的所有代码。开发者可以...

    备忘录JAVA代码

    【标题】"备忘录JAVA代码"涉及到的核心知识点主要集中在Java编程语言以及备忘录功能的实现上。Java是一种广泛使用的面向对象的编程语言,它以其"一次编写,到处运行"的特性闻名,具备强大的跨平台能力。在这个项目中...

    android 应用 源代码——备忘录

    本资源包提供了一套完整的Android备忘录应用的源代码,这为开发者提供了学习和参考的宝贵材料。以下将详细介绍备忘录应用开发中的关键知识点: 1. **界面设计**:Android应用的用户界面设计是至关重要的。备忘录...

    C#备忘录数据库代码

    C#备忘录数据库代码通常涉及到如何在C#中与数据库进行交互,以实现创建、读取、更新和删除(CRUD)备忘录的功能。这里我们将深入探讨相关知识点,帮助你理解并开发自己的C#备忘录应用。 1. 数据库选择: - C#中常...

    C语言备忘录程序代码

    根据给定的文件信息,我们可以总结出以下关于“C语言备忘录程序代码”的关键知识点: ### C语言备忘录程序概述 此备忘录系统是用C语言编写的,旨在帮助用户记录并管理日常生活或工作中重要的事件。系统通过结构体`...

    备忘录模式.rar备忘录模式.rarjava设计模式

    在提供的“备忘录模式.rar”压缩包中,可能包含了实现备忘录模式的Java代码示例,包括发起人、备忘录和存档者的具体实现,以及如何在实际项目中使用这些组件的例子。学习这些代码可以帮助你更好地理解备忘录模式的...

Global site tag (gtag.js) - Google Analytics