小编Jay*_*esh的帖子

Threadpool如何重用Threads及其工作原理

我的多线程概念很薄弱并且正在努力学习.

在我所知道的java中,我们不能再调用一次线程即ie

Thread t = new Thread; //Some Runnable
t.start();

t.start(); //Illegal and throw Exception at runtime.
Run Code Online (Sandbox Code Playgroud)

据我所知,当你再次调用t.start()时会抛出异常,因为一旦它离开t.start()方法并且你试图再次初始化东西,Thread的相关堆栈就会被销毁.

在这种情况下,我对Threadpool的了解是,它提供了更好的性能并节省了时间,因为不需要创建新线程.(我在http://www.javatpoint.com/thread-pooling-in-java上读到)

如果不需要在ThreadPool场景中创建新的Thread,那么它如何与刚刚完成其run方法的同一个线程一起工作,那么Thread是否可以再次使用?

我读了这篇http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html ,它说" java.util.concurrent中的大多数执行器实现使用线程池,它由工作线程组成这种线程与它执行的Runnable和Callable任务分开存在,通常用于执行多个任务. "

那么这里的Worker线程是什么,它与普通的Java Threads有什么不同?

使用此链接缓存线程池如何重用现有线程我得到了一些东西但仍然混淆了当我们使用线程池时可以消除哪种东西,并且使用普通Java线程提供更好的性能.

我们可以这样说,

线程有三个部分,

  1. 创建(告诉操作系统它是新线程,为它创建堆栈.)
  2. 执行Runnable即run()方法.
  3. 销毁线程.

因此,考虑到上述3个步骤,使用Threadpool步骤1和步骤3可以在固定数量的线程创建后消除.只执行每个任务的第2步,这就是为什么Threadpool更快?我们可以这样说吗?我对么?

java concurrency multithreading threadpool

42
推荐指数
2
解决办法
1万
查看次数

为什么超类的实例变量没有在子类方法中重写

为什么超类的实例变量没有在子类方法中被覆盖,请参阅下面的代码..在哪个方法中打印被覆盖但是变量a不是.以及为什么代码允许在子类中写入重复变量

class B {
    int a = 10;
    public void print() {
        System.out.println("inside B superclass");
    }
}

class C extends B {
    int a = 20;
    public void print() {
        System.out.println("inside C subclass");
    }
}

public class A {
    public static void main(String[] args) {
        B b = new C();
        b.print(); // prints: inside C subclass
        System.out.println(b.a); // prints superclass variable value 10
    }
}
Run Code Online (Sandbox Code Playgroud)

java

36
推荐指数
1
解决办法
3万
查看次数

Java变量放在堆栈或堆上

我对Java没什么了解.

我经历了几个链接,发现博客上写着"Java Primitives存储在堆栈上",我觉得它依赖于实例变量或局部变量.

经过几个链接我的结论是,


类变量 - 基元 - 作为它包含的Object的一部分存储在堆上.

类变量 - 对象(用户定义) - 作为其包含的Object的一部分存储在堆上.对于参考对象和实际对象都是如此.

方法变量 - 基元 - 作为堆栈帧的一部分存储在堆栈中.

方法变量 - 对象(用户定义) - 存储在堆上,但堆上对该区域的引用作为该堆栈帧的一部分存储在堆栈中.如果Object包含其中的另一个对象,也可以将引用存储在堆上.

静态方法(实际上是所有方法)以及静态变量都存储在堆中.

如果我的理解是错误的,请纠正我.谢谢.

java

25
推荐指数
2
解决办法
1万
查看次数

按顺序java运行3个线程

我有3个线程第1次打印第2次打印B第3次打印C.

我想按顺序打印ABCABCABC等等......

所以我写了下面的程序,但我无法实现同样的目标.我知道当status = 1时,例如B1和C1线程正在等待,当我执行notifyAll()时,两个等待线程唤醒并根据CPU分配,它可能会打印B或C.

在这种情况下,我希望在A之后只打印B.

我需要做什么修改.

public class NotifyAllExample {

    int status=1;
    public static void main(String[] args) {

        NotifyAllExample notifyAllExample = new NotifyAllExample();

        A1 a=new A1(notifyAllExample);
        B1 b=new B1(notifyAllExample);
        C1 c=new C1(notifyAllExample);

        a.start();
        b.start();
        c.start();
    }
}

class A1 extends Thread{
    NotifyAllExample notifyAllExample;

    A1(NotifyAllExample notifyAllExample){
        this.notifyAllExample = notifyAllExample;
    }

    @Override
    public void run() {

        try{
            synchronized (notifyAllExample) {

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

                    if(notifyAllExample.status!=1){
                        notifyAllExample.wait();
                    }

                    System.out.print("A ");
                    notifyAllExample.status = 2;
                    notifyAllExample.notifyAll();
                }

            } …
Run Code Online (Sandbox Code Playgroud)

java multithreading notify

14
推荐指数
2
解决办法
3万
查看次数

谷歌地方自动完成限制到特定区域

我的要求是仅为班加罗尔地方获取谷歌地方自动完成建议,但我不是仅为班加罗尔或提及纬度经度的地方.

我想仅在自动填充文本字段中的图像位置下方退役.

在此输入图像描述

有人可以建议如何实现相同和我出错的地方.

使用Javascript:

<script type="text/javascript">


   function initialize1() {

    var southWest = new google.maps.LatLng( 12.97232, 77.59480 );
    var northEast = new google.maps.LatLng( 12.89201, 77.58905 );
    var bangaloreBounds = new google.maps.LatLngBounds( southWest, northEast );

    var options = {
        bounds: bangaloreBounds,
        types: ['(cities)'],
        componentRestrictions: {country: 'in'}
    };

     var input = document.getElementById('searchTextFieldTo');
     var autocomplete = new google.maps.places.Autocomplete(input, options);
   }
   google.maps.event.addDomListener(window, 'load', initialize1);
</script>
Run Code Online (Sandbox Code Playgroud)

文本域:

<input type="text" id="searchTextFieldTo" class="ui-timepicker-hour" style="width:350px;text-align:left;font-style:italic;" placeholder="Enter To location" autocomplete="on" />
Run Code Online (Sandbox Code Playgroud)

google-maps google-maps-api-3 google-places-api google-places

8
推荐指数
1
解决办法
2万
查看次数

Jar文件ADD DIRECTORY ENTRIES导出jar时的Eclipse选项

我不知道我是否在问正确的问题,但我想澄清我的怀疑.

实际上我遇到了从jar文件中引用类文件的场景.我的意思是说我有一个后端java项目说ABC带有application-context.xml文件.

现在我创建了ABC项目的jar文件,并在一个基于Web的应用程序中使用.

在这里,我面临一个bean没有得到Autowired的问题,并且开始知道问题是,当我使用Eclipse导出ABC项目的jar文件时,我没有选择"ADD DIRECTORY ENTRIES"复选框,后来我做了所有工作.

只是看看通过在jar文件中选中此框来进行哪些更改,以便所有工作都可以,

所以我创建了2个jar文件,其中一个选中了"ADD DIRECTORY ENTRIES",另一个未经检查,然后我比较了两个使用超出比较的jar,发现没有任何区别.

有人可以解释一下"ADD DIRECTORY ENTRIES"究竟是什么吗?

我所知道的是它应该添加完整的结构而不是像com/company/project/MyJavaFile.class这样的单一路径

COM /公司/

COM /公司/项目/

COM /公司/项目/ MyJavaFile.class

如果我错了,请纠正我.

java eclipse spring jar java-ee

7
推荐指数
1
解决办法
5294
查看次数

为什么要使用ServletContext.setAttribute()?

为什么我们要使用该setAttribute()方法设置ServletContext参数,因为我们可以通过设置参数web.xml并使用它来获取它们来完成同样的事情getInitParameter()

servlets setattribute

5
推荐指数
1
解决办法
9269
查看次数

Tomcat如何处理多个请求

我知道创建Web应用程序,但我有一个基本的疑问.

我很抱歉提出非常愚蠢的问题,但我想澄清我的怀疑.

Tomcat容器如何处理请求,我的意思是当我发送home.jsp页面的请求时,我只得到home.jsp页面的响应,而不是register.jsp页面,同时可能是其他人给出的请求来自世界其他角落的人.

例如:

Client A --------request(a.jsp)----------> Tomcat (check request received for a.jsp and give proper a.jsp response to client A)

Client B --------request(b.jsp)----------> Tomcat (check request received for b.jsp and give proper b.jsp response to client B)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Tomcat如何在请求者和对正确请求者的响应之间不会混淆.

内部如何工作.

一些解释这一点的链接也会有所帮助.

谢谢.

containers tomcat servlets java-ee

5
推荐指数
1
解决办法
3766
查看次数

ReentrantLock用例

我在Java的MultiThreading概念方面很差.

我正在通过ReentrantLock功能和用法.我得到它更灵活然后同步并添加更多功能.

我可以看到上面提到的例子,我做得很好.

我无法弄清楚实际情况,它确实会对业务有所帮助.

我可以看到最好避免死锁.

有人可以提供没有ReentrantLock的用例,很难解决这种用例.

或者可以指向某些链接会有所帮助.

java multithreading locking

5
推荐指数
1
解决办法
1703
查看次数

Java标签用法

在某个地方浏览java好文章,我发现这样的代码完美编译.

public int myMethod(){
    http://www.google.com
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

描述说http:该词将被视为标签和//www.google.com评论

我不知道Java Label在循环外是如何有用的?在什么情况下应该使用Java Label外部循环?

java

5
推荐指数
1
解决办法
5926
查看次数