java 方法jsp调用java方法同一个类下面的方法问题

Java中调用一个类重复执行这个类中的一个方法,这个方法返回一个对象! - ITeye问答
我试过了,Timer与TimerTask,可以重复执行,但是执行的方法在run方法里面,不能返回对象!主要事项:别的工程可能要调用我的一个类中的方法,这个方法每隔几分钟重复执行一次并返回一个对象,请问应该如何实现
最直接的就是在线程里设一个返回结果.
用线程句柄获得,不过这不是一个很好的设计.
同意楼上的
Timer是异步的,请问这个对象返回给谁?我给你2种方案:
1,返回一个Future,这个Future里面有等待方法和获取返回结果的方法;
2,使用事件机制,让被人可以给你的任务注入一个监听器,当这个任务执行完后,你把需要返回的对象扔给监听器处理。
已解决问题
未解决问题问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
1.背景是这样的:我有一个MainActivity,它会new一个类“Base”。然后它会新建一个SecActivity,但此SecActivity也会用到这个“Base”类,但问题来了,这两个页面的Base类做不到同一个,请问大家有什么好方法解决?
2.示意代码如下:
public class Base{
public int V
public class A{
Base baseHandle = new Base();
private void foo()
baseHandle.Value = 10;
B bHandle = new B();
bHandle.baseHandle = baseH
public class B{
Base baseHandle = new Base();
private void foo()
baseHandle.Value = ?;
//请问如何让Value 等于A中已赋值的10,而不是0;
在C#里这么做貌似没问题,但在java里,或者说是在Android studio里这个做却是行不通,恳请大家指教,谢谢。
-------------更新----可能问题描述有点脱离本意,其实是这样的:我一个底层类“myDriver”,里面包含了串口驱动和各式下位机接口方法,还有个定时器。
然后我在MainActivity里把这个myDriver实例化,并已经打开串口了。
然后我startActivity了secActivity,但是这个第二个页面没法调用第一个页面已经实例过的myDriver。
我是想让第二个页面能够操作到第一个页面实例化后的myDriver句柄,求救啊~~~
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
你的意思是想把Base写成一个单例吗, 由Base控制对象创建,其他类使用Base对象的时候都需要通过一个Base类中的public的获取实例的方法获取Base对象.简单写法:
public class Base {
private Base () {
private static Base base =
public static synchronized Base getInstance(){
if(null == base){
base = new Base();
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 Appjava从一个不是主类的类如何调用另一个类中的方法
全部答案(共2个回答)
ic class StaticFunction {//被调用的
public static void A(){} public void B(){}}//调用者package com.sss.public class test { public void T(){
StaticFunction.A();
StaticFunction sf=new StaticFunction();
sf.B(); }}
不需要,只有导入别的包的类是才需要声明。
希望能帮助你。
就调实现类啊
首先是申明一个接口,关键字:interface,语法:
public interface MyInterface
(1)你没有理解类和类实例的关系,类是对一个拥有数据和方法的信息的定义,而类实例则是由这些定义派生得到的一个数据体;比如:Person是一个人的定义,也就是一个...
急问tutucarvan的搭载人数
答: 这个要设计到JNI的开发,就是用Java来调用C语言的函数库,还要编写缓冲器来解决传输问题,还有就是网络协议一定要了解,做的时候要用多线程来控制你所有的缓冲器,...
答: 所谓的网络编程,不论c还是java,本质上都是通过socket进行数据传输;
一般情况下可以使用的传输协议有tcp、udp、ftp等等,这些协议为网络变成提供...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415java作业与答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java作业与答案
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Java中同一个类中不同的synchronized方法是否可以并发执行 ?? - 简书
Java中同一个类中不同的synchronized方法是否可以并发执行 ??
更通俗简单的问法: "Java中两个线程是否可以同是否问一个对象的两个不同的synchronized方法????"
答案是: 不可以!!!
也许这个问题在你看来显而易见, 但是我却一直以为:
几个不同线程同时访问某个类的同一个synchronized方法时, 一个线程执行时, 其他线程都等待; 若是几个不同线程访问的是一个类不同的synchronized, 则可以同时执行.
让大神们见笑了~~
======但是如果你也有和我一样的观念, 那么就请仔细阅读下面的文字!!
多个线程访问同一个类的synchronized方法时, 都是串行执行的 ! 就算有多个cpu也不例外 !
synchronized方法使用了类java的内置锁, 即锁住的是方法所属对象本身. 同一个锁某个时刻只能被一个执行线程所获取, 因此其他线程都得等待锁的释放. 因此就算你有多余的cpu可以执行, 但是你没有锁, 所以你还是不能进入synchronized方法执行, CPU因此而空闲. 如果某个线程长期持有一个竞争激烈的锁, 那么将导致其他线程都因等待所的释放而被挂起, 从而导致CPU无法得到利用, 系统吞吐量低下. 因此要尽量避免某个线程对锁的长期占有 !
下面给出验证代码, 君自斟酌:
public class SyncMethod {
public synchronized void syncMethod2() {
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 已经获取内置锁`SyncMethod.this`)");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 即将释放内置锁`SyncMethod.this`)");
public synchronized void syncMethod1() {
System.out.println("######################## (syncMethod1, 已经获取内置锁`SyncMethod.this`, 并即将退出)");
static class Thread1 extends Thread {
SyncMethod syncM
public Thread1(SyncMethod syncMethod) {
this.syncMethod = syncM
public void run() {
syncMethod.syncMethod2();
static class Thread2 extends Thread {
SyncMethod syncM
public Thread2(SyncMethod syncMethod) {
this.syncMethod = syncM
public void run() {
System.out.println("Thread2 running ...");
syncMethod.syncMethod1();
public static void main(String[] args) throws InterruptedException {
SyncMethod syncMethod = new SyncMethod();
Thread1 thread1 = new Thread1(syncMethod);
Thread2 thread2 = new Thread2(syncMethod);
thread1.start();
//先执行, 以便抢占锁
Thread.sleep(500); //放弃cpu, 让thread1执行, 以便获的锁
thread2.start(); //在syncMethod1()方法获得锁时, 看看syncMethod2()方法能否执行
能否并发执行同一个对象不同的synchronized方法, 即看看能否同时进入一个对象synchronized方法块
1. 创建一个有两个synchronized方法的对象`syncMethod`
2. 先启动一个线程(Thread1), 并让其进入syncMethod对象的sychronized方法(syncMethod1)内, 并使其停在synchronized方法内
3. 再启动一个线程(Thread2), 并执行syncMethod对象的一个synchronized方法(syncMethod2), 看看能否进入此方法内
@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 已经获取内置锁`SyncMethod.this`)
Thread2 running ...
@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 即将释放内置锁`SyncMethod.this`)
######################## (syncMethod1, 已经获取内置锁`SyncMethod.this`, 并即将退出)
观察显示, 在输出`Thread2 running ...`后会暂停数秒(Thread2无法获得所而被挂起, 因为锁已经被Thread1持有).
如果不同线程可以同时访问同一个对象不同synchronized方法的话,
在有足够cpu时间片时(Thread1在调用syncMethod1时使用Thread.sleep放弃了cpu),
Thread2调用的syncMethod2方法应该马上执行, 也就是syncMethod2方法中的语句在`Thread2 running ...`语句输出后马上输出,
而不是等待数秒才输出 (应为此时没有其他线程跟Thread2竞争cpu, 况且现在的电脑都不只一个cpu),
因此得出结论: "不同线程不能同时执行一个对象的不同synchronized方法"
其实此结论是显而易见的, 原理前面已经阐明, 此处不再赘述.
下面是一些关于使用锁的一些建议:为了避免对锁的竞争, 你可以使用锁分解,锁分段以及减少线程持有锁的时间, 如果上诉程序中的syncMethod1和syncMethod2方法是两个不相干的方法(请求的资源不存在关系), 那么这两个方法可以分别使用两个不同的锁, 改造后的SyncMethod类如下:
public class SyncMethod {
private Object lock1 = new Object();
private Object lock2 = new Object();
public void syncMethod2() {
synchronized (lock1) {
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 已经获取内置锁`SyncMethod.this`)");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 即将释放内置锁`SyncMethod.this`)");
public void syncMethod1() {
synchronized (lock2) {
System.out.println("######################## (syncMethod1, 已经获取内置锁`SyncMethod.this`, 并即将退出)");
改造之后Thread1和Thread2就不会发生, 由于锁竞争而挂起的情况了.
当然, 如果syncMethod1中耗时操作与锁定的资源无关, 那么也可以将耗时操作移出同步块. 在上述改造的基础上对syncMethod1的进一步改造如下:
public void syncMethod2() {
synchronized (lock1) {
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 已经获取内置锁`SyncMethod.this`)");
System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@ (syncMethod2, 即将释放内置锁`SyncMethod.this`)");
//将耗时操作移出同步块
Thread.sleep(5000);//与同步使用的资源无关的耗时操作
} catch (InterruptedException e) {
e.printStackTrace();
.关于并发编程, 圣经在此 =& 有些观念生而有之, 久而久之,我们就认为它们是对的合理的,然而并非如此。如果某一天你对某个曾经深信不疑的观念有了疑问, 那么赶紧行动起来,请用你的理性思考它,验证它。
Read the fucking source code !}

我要回帖

更多关于 java调用接口方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信