Although ArrayBlockingQueue is simpler overall, I believe it uses a single lock for both put and take operations. So if you are using it to transfer very frequent (as in thousands or millions of messages per second) messages from one thread to another thread it may end up with worse performance due to contention.
Conversely, I believe LinkedBlockingQueue uses independent locks for put and take. Therefore if you have just one thread putting and another thread taking there may be less contention. However if you have multiple threads putting or multiple threads taking then there might be more contention because each lock operation will be a little bit longer than the equivalent operation with ArrayBockingQueue.
Concolusion: If you are using it to frequently transfer messages from a single source thread to a single detsination thread then LinkedBlockingQueue may be better as it may have less contention. Otherwise ArrayBlockingQueue is probably slightly faster.
If in doubt you would have to do real testing for your specific use case. But unless you are trying to send millions of messages per second you probably wont notice any significant difference - in most cases both will work equally well :)